【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);
}
}
- 静态初始化块的优先级最高,也就是最先执行,并且仅在类第一次被加载时执行;
- 非静态初始化块和构造函数后执行,并且在每次生成对象时执行一次;
- 非静态初始化块的代码会在类构造函数之前执行。因此若要使用,应当养成把初始化块写在构造函数之前的习惯,便于调试;
- 静态初始化块既可以用于初始化静态成员变量,也可以执行初始化代码;
- 非静态初始化块可以针对多个重载构造函数进行代码复用