动手动脑
【final对象的用法】
public class lianxi(){
public static void main(String[] args) {
final lianxi obj =new lianxi();
//添加final,obj不能指向另一个对象, "obj=ojk;"错误但可以修改对象
lianxi ojk =new lianxi();
//obj=ojk;若没有final则obj和ojk都指向ojk的值,这种特殊的现象通常也叫作“别名”,是Java操作对象的一种基本方式
}
}
【private私有变量,用get set 函数设置,读取】
package lianxi; public class lianxi { public String information="初值"; public void mymethod(String argu) { System.out.println(argu); } private int value;//私有变量value不能直接访问,通过get,set访问 public void setValue(int value) { this.value = value; } public int getvalue() { return value; }
【equals函数的重载,构造函数的使用】
package lianxi;
public class lianxi {
public int num;
public boolean equals(lianxi obj)//重载equals函数
{
return obj.num==this.num;
}
lianxi (int initnum)//自己定义的构造函数,给num赋值,则系统不在提供默认的构造函数
{
num=initnum;
}
lianxi()
{
this(2);//构造函数之间可以相互调用,this(),调用lianxi(int initnum)构造函数,将2的值赋给num
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
lianxi a=new lianxi(2);
lianxi b=new lianxi();//先调用构造函数lianxi(),lianxi()中的this(),调用lianxi(int initnum)构造函数,将2的值赋给num
if(a.equals(b))
System.out.println("相等");
else
System.out.println("不相等");
}
}
【静态初始化块,static{}非静态初始化块{},构造函数的调用顺序】
package lianxi; //静态初始化块都优先执行,其次才是非静态的初始化块和构造函数 public class lianxi { static int num=1; int shuzi=21;//这句话在初始化块之前,或之后,会影响shuzi的值,在前则最终结果以初始化块为止,在后则以“int shuzi=21;”为止。 static //每个类的静态初始化块都只在第一次实例化该类对象时执行一次,静态初始化块初始化静态变量 { num=1; System.out.println("调用一次静态初始化块"); } //只要实例化对象时就调用非静态初始化块 { shuzi=2; System.out.println("调用初始化块"); } public lianxi(int initnum,int initshuzi) { this.num=initnum; this.shuzi=initshuzi; System.out.println("调用自定义的构造函数"); } public lianxi() { System.out.println("调用默认的构造函数"); } public static void main(String[] args) { // TODO 自动生成的方法存根 lianxi a=new lianxi(4,4); System.out.println("num的值为"+a.num); System.out.println("shuzi的值为"+a.shuzi); lianxi b=new lianxi(); //lianxi.num=0;//用类名(对象名)访问static int num System.out.println("num的值为"+b.num); System.out.println("shuzi的值为"+b.shuzi); } }
- 静态初始化块的优先级最高,也就是最先执行,并且仅在类第一次被加载时执行;
- 非静态初始化块和构造函数后执行,并且在每次生成对象时执行一次;
- 非静态初始化块的代码会在类构造函数之前执行。因此若要使用,应当养成把初始化块写在构造函数之前的习惯,便于调试;
- 静态初始化块既可以用于初始化静态成员变量,也可以执行初始化代码;
- 非静态初始化块可以针对多个重载构造函数进行代码复用