java中常见关键字分析(一)

1. this关键字

this关键字特征:
this关键字表示调用当前方法的类对象/或者说当前构造方法中初始化的类对象 

如下代码: 运行后三条输出语句结果一样

class Cat {
	public Cat() {
		System.out.println("Constructor : " + this);
	}
	
	public void test() {
		System.out.println("Method Called : " + this);
	}
}

public class Demo1 {
	public static void main(String[] args) {
		Cat cat = new Cat();
		
		System.out.println("Instance : " + cat);
		cat.test();
	}
}

this关键字可以解决就近原则问题

/*
在下面的代码中 所有出现的name,age都会被看作一个局部变量,而不是成员变量
我们需要使用一种方式告知编译器 = 左边的属性为成员变量
*/
public Cat(String name, int age) {           
	name = name;                             
	age = age;                               
	System.out.println("带有两个参数的构造方法");       
}  

//修改方式
public Cat(String name, int age) {           
	this.name = name;                             
	this.age = age;                               
	System.out.println("带有两个参数的构造方法");       
}  

this是指当前类对象,那this.name的意思就是当前类对象的name属性,而不是一个局部变量。

2. final关键字

final意为最终的 最后的

1. 修饰成员变量:定义时必须初始化,并且赋值后无法修改 final int num; num = 20;不可以 声明赋值必须在同一行
2. 修饰成员方法:不能被子类重写,为最终方法
3. 修饰局部变量:一旦被赋值,不能修改 final int num; num = 20; 可以 声明赋值可以不在同一行
4. 修饰类:没有子类,不能被继承 abstract与final不能共用

3. static 关键字

3.1 static修饰成员变量

3.1.1 static修饰成员变量需求
/*
例如Person下面有三个属性 ,其中country属性为大多数人所拥有并一模一样
思考:这里不希望大量的数据类型,是否可以把数组放置在一个公共区域内。所有的对象都可以使用,不在自己的对象保存数据,节约内存空间
这时用static关键字修饰country属性,可以实现
*/
class Person {
	private String name;
	private int age;
	privaet String country = "中国";
}

用生活中的例子解释:共享单车问题(这个大家肯定都明白,我就不详细解释了)
用static修饰的成员变量解释:

  • 公众区域存放
  • 共享性使用
  • 和对象无关
  • 一处修改,处处受到影响
3.1.2 静态成员变量使用注意事项
1. 静态成员变量是使用static修饰的成员变量,定义在内存的【数据区】
2. 通过静态方式(类名.)访问或者调用
3. 当我们未曾创建对象时,也可以通过类名.调用静态成员变量,和对象无关
4. 当创建了对象,但是对象被JVM中的GC销毁时,依然可以通过类名.调用,和对象无关
5. 当静态成员变量被修改时,所有使用到这个静态成员变量的位置都会受到影响
3.1.3 解释静态成员变量和对象无关
1.从内存的角度分析
	静态成员变量是保存在内存的数据区
	类对象占用的实际内存空间是在内存的堆区
	两个存储区域不同,自然没有任何关系
2.从生命周期角度分析
	静态成员变量是随着类文件(.class) 字节码文件的加载过程中,直接定义在内存的数据区。静态成员变量从程序运行开始就已经存在。
	类对象只是从创建开始,随时有可能被JVM的GC销毁
	生命周期不同,自然没有任何关系
3.2 static修饰成员方法
3.2.1 静态成员方法的格式
public static 返回值类型 方法名(形式参数列表) {

}
3.2.2 静态成员方法注意事项
1. 使用静态方式调用,类名.的形式
2. 静态成员方法中不能使用非静态成员
3. 静态成员方法中不能使用this关键字(没有对象)
4. 静态成员方法中可以使用类内的其他静态成员
5. 静态成员方法中可以通过new构造方法自己创建对象
3.2.3 静态成员方法特征解释
1. 静态成员方法加载时间问题
静态成员方法是随着.class字节码文件的加载而直接定义在内存的【方法区】,而且此时的静态成员方法已经可以直接运行。可以通过类名直接调用,而此时没有对象存在。【没有对象】
2. 为什么静态成员方法不能使用非静态成员
非静态成员变量和非静态成员方法时需要类对象调用的,在静态成员方法中,是可以通过类名直接执行的,而此时是【没有对象】的。
3. 为什么静态成员方法不能使用this关键字
this关键字表示的是调用当前方法的类对象,但是静态成员方法可以通过类名调用,this不能代表类名,同时也是【没有对象】
4. 静态成员方法可以使用其他静态成员  生命周期一致,调用方式一致
3.2.4 静态代码块
/*
只要类文件加载,当前静态代码块中的内容就一定会执行,并且有且只执行一次。
*/
static {
	// 静态代码块
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值