java关键字①

关键字
1.this
this表示本类的一个对象,谁调用就是指向谁
this使用场景:

(1)this.属性;在类的方法中操作属性(main方法和static修饰的方法除外)

如果方法没有局部变量名字与属性名一样,this.属性中的this就可以省略。

(2)与上同理this.方法也可以省略this。

(3)构造方法与方法的调用情况又不相同:

new 构造方法() 调用有参构造方法创建一个新的对象

this()只是调用构造方法,不会新建对象

public class Student{
String name;
int age;

//有参构造方法
public student(String name,int age){
    this.name = name;
    this.age = age;
}

public Student(){
    new Student("张三",19);//下面的对象调用了无参构造方法,然后无参构造自己new了一个有参构造,但是没有人接收。也不会被zs接收,因为这个是新的对象,但是用this情况就不一样了。
}

}

public class StudentTest{
public static void main(String[] args){
//创建一个student对象
Student zs = new Student();
System.out.println(zs.name);//null
System.out.println(zs.age);//0
}
}
this()调用构造方法的限制条件
1)必须在构造方法中使用,在别的地方使用会编译报错

2)必须位于被调用的构造函数第一行要不然也会编译报错

Static 静态
static修饰的含义
static修饰的东西,会被该类的所有对象共用;

非static修饰的,那它就独立于每个对象

1.修饰属性
这个属性不在是我们之前的属性,之前的属性都是成员属性,实例属性(即每一个成员都会有自己的属性)被static修饰的属性那成为类属性 静态属性 常量。(即这个类所创建的所有对象会共用一个属性)

public class Demo{
int a;//成员属性
static int b;//类属性

public static void main(String[] args){
    Demo d1 = new Demo();
    Demo d2 = new Demo();
    
    d1.a = 10;
    d1.b = 10;//给对象d1的a,b变量分别赋值10,b为类变量,现在所有对象的b都为10
    System.out.println(d1.b==d2.b);//因为是类变量,所以就算d2没有赋值也会输出true
    
    d2.a = 20;
    d2.b = 20;//给对象d2的a,b变量分别赋值20,因为b为类变量所以会覆盖d1.b的值
    
    System.out.println("d1.a="+d1.a+",d1.b="+d1.b);
    System.out.println("d2.a="+d2.a+",d2.b="+d2.b);
    //最后输出d1.a = 10,d1.b = 20;
    //d2.a = 20,d2.b = 20;
}

}
对于static修饰的属性或者方法,可以使用对象名.名字的方法调用,也可以使用类名.名字的方式调用,更推荐后者,因为后者的代码可读性高,能让人知道这个是类属性或者类变量。

类属性与实例属性的区别
类属性是该类所有对象共享,共享属性在每个对象都是独立的

调用类属性,不需要创建对象来调用,而实例属性则需要创建对象

类属性可以使用类名.来调用,还可以使用对象名.而实例属性只能使用后者

类属性的使用场景:该类的某个属性被所有的对象共享,使用类属性,其他情况一般不使用。

2.修饰方法
被修饰的称为静态方法

没有被修饰的称为非静态方法或者普通方法

静态方法被调用可以直接通过类名.来调用。使用静态方法不需要创建对象

静态方法使用注意事项
不要滥用静态方法,静态资源不会马上释放,而是等到整个程序停止进程才会释放

使用场景:一般是在工具类中使用jdk中Arrays(数组工具类),他的方法都是static

非静态方法内部使用静态的资源也可以使用非静态资源,但静态方法只能使用静态资源

类加载的过程
先加载静态资源,然后在加载非静态资源

Demo.java 编译(javac)—>Demo.class 类加载器(classloader)—>内存

在内存中,先加载静态资源,然后在加载非静态资源

3.静态代码块
//静态代码块
public class A{
static{//静态代码块
//逻辑代码
}
}
执行的时机,当这个类被加载到内存的时候,就执行 每个类的class文件只执行一次

使用场景:项目启动的时间,需要进行一些初始化操作,一般把这种初始化操作加入到静态代码块中

ps:一个类可以有多个静态代码块,多个静态代码块执行顺序是从上到下,只执行一次;

同理静态代码块也只能使用静态资源;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值