java自学日记no.4

data:2020/2/14

封装

封装是程序访问控制权限的处理操作

把对象的成员属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位(对象)中

“信息隐蔽”,把不需要让外界知道的信息隐藏起来

private:封装,提供setXXX和getXXX来操作被封装的属性

使用private实现封装:

class Person { //定义一个类
	private String name; //【成员属性】人的姓名
	private int age; //【成员属性】人的年龄

//定义一个信息获取的操作方法,此方法可以输出属性内容
	public void tell() { 
		System.out.println("姓名:" + name +"、年龄:" + age);
}

	public void setName(String tempName) { //设置name属性内容
		name = tempName;
}

	public void setAge(int tempAge) { //设置age属性内容
		if (tempAge > 0 && tempAge < 250) {
		//如果有需要则可以追加一些验证逻辑
			age = tempAge;
		}
}

	public String getName() { //获取name属性内容
		return name;
	}

	public int getAge() { //获取age属性内容
   		return age;
	}
}

public class Test2 {
	public static void main(String args[]) {
 		Person per = new Person(); //声明并实例化对象
 		per.setName("张三"); //设置属性内容
 		per.setAge(-18); //设置属性内容
 		per.tell(); //进行方法的调用
 	}
}

输出:
姓名:张三、年龄:0

类构造方法

在一个类使用关键字new实例化新对象时默认调用
主要功能是完成对象属性的初始化操作

关于构造方法的补充说明:

类名称 对象名称 = new 类名称()

类名称:对象的所有功能必须由类定义,也就是说本操作是告诉程序类所具有的功能
对象名称:实例化对象的唯一标注,在程序中利用此标注可以找到一个对象
new:类属于引用数据类型,所以对象的实例化一定要用new开辟堆内存空间
类名称():一般只有在方法定义的时候才需要加上(),这个就表示调用构造方法

一旦开始定义构造方法,呢么类中就会存在构造方法与普通方法两种方法
区别在于:
构造方法是在实例化对象的时候使用,普通方法是在实例化对象产生之后使用

没有返回值
可以重载,在创建类的时候可以直接初始化类的属性
没有构造方法,默认会给一个空参构造函数null、0等
有了有参构造,初始化必须用有参,所以建议加上一个无参构造

扫描二维码关注公众号,回复: 10527247 查看本文章
默认情况下会存在一个无参构造方法:

class Person {	//类名称首字母大写
	public Person() {	//【代码编译时自动生成】无参且无返回值的方法
	}
}

匿名对象

概念:匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量
特点:
创建匿名对象直接使用,没有变量名
匿名对象在没有指定其引用变量时,只能使用一次
匿名对象可以作为方法接收的参数、方法返回值使用

使用匿名对象进行类操作:

public class JavaDemo {
	public static void main(String args[]) {
		new Person("张三", 18).tell();
		}
}

输出:
姓名:张三、年龄:18

Q:匿名对象能否调用属性并赋值?
A:匿名对象能调用属性并赋值,因为每次调用都会创建一个新的对象,赋值完后就变成垃圾了。所以没有意义。

static关键字

static是一个用于声明程序结构的关键字
特点:
可以避免对象实例化的限制,
在没有实例化对象的时候直接进行此类结构的访问

定义static属性:

class Chinese {
	private String name;	//【普通成员属性】保存姓名信息
	private int age;	//【普通成员属性】保存年龄信息
	static String country = "中华人民共和国";	//【静态成员属性】国家,暂时不封装
	public Chinese(String name,int age) {	//设置普通属性内容
		this.name = name;	//设置name属性内容
		this.age = age;	//设置age属性内容
	}
	public String getInfo() {
		return "姓名:" + this.name + "、年龄:" + this.age + "、国家:" + this.country;
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		Chinese perA = new Chinese("张三",10);	//实例化Chinese类对象
		Chinese perB = new Chinese("李四",10);	//实例化Chinese类对象
		Chinese perC = new Chinese("王五",11);	//实例化Chinese类对象
		perA.country = "伟大的中国";	//修改静态属性内容
		System.out.println(perA.getInfo());	//获取对象信息
		System.out.println(perB.getInfo());	//获取对象信息
		System.out.println(perC.getInfo());	//获取对象信息
	}
}

输出:
姓名:张三、年龄:10、国家:伟大的中国
姓名:李四、年龄:10、国家:伟大的中国
姓名:王五、年龄:11、国家:伟大的中国

this:因为setXXX(String age),如果这个时候成员变量也是private String age,重名了,就近原则,这个时候就是age给自己赋值了,所以要加this.age = age

setXXX(String age) {
age = age; //所以要加 this.age = age
}

static修饰属性,随着类的加载而加载,优先于对象存在,放在方法区的静态区,被所有对象共享,只要初始化一次,节约内存
可以直接用类名.静态属性/方法来赋值 Person.name
静态只能访问静态
类比:static修饰的是解压缩文件,而非静态的是压缩文件,需要创建一个对象来解压缩才能用,所以非静态成员方法可以访问静态成员变量,而静态成员方法不可以访问非静态成员变量(因为这个时候非静态的还没有解压缩,或者说还没被创建出来!)自然地,静态属性或方法不能有this关键字

如果一个类中所有的,需要创建一个私有构造方法,目的是不让其他本类创建对象,类中的方法用类名直接调用即可

发布了38 篇原创文章 · 获赞 4 · 访问量 842

猜你喜欢

转载自blog.csdn.net/Hide111/article/details/104315201
今日推荐