Java中的关键字static、this、super、final

本文深入探讨了Java中的static、final关键字及this和super的用法。static关键字用于定义类级别成员,而final则确保不可变性。同时介绍了这些关键字的具体应用场景,并通过示例代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引发对java关键字的再学习是在项目组遇到的一个问题导致的,通过不同的容器weblogic、ejb访问类中的同一static方法,得出的结果不一样,致使程序运行时产生重大灾难!(本文多处为别处摘录)

一、static

1、static 修饰成员字段

当类被虚拟机加载时,首先按照字段声明的先后顺序对static成员字段进行初始化

2、static 修饰成员函数

该成员函数不能使用this对象

static不能修饰构造函数

static不能修饰函数参数

static不能修饰局部成员变量

3、static 修饰语句块

当类被虚拟机加载时,按照声明顺序先后初始化static成员字段和static语句块

static所修饰的方法和字段是只属于类,所有对象共享

在static所修饰的函数和语句块中不能使用非static成员字段

 

二、final

1、final 修饰类

表示该类不可被继承

final不可修饰interface接口与abstract类

2、final 修饰方法

表示该方法不可被子类覆盖(即子类不可重写父类的final方法,但可以被继承)

final不可修饰构造函数

3、final 修饰成员属性

表示属性值第一次初始化后不可被修改

final属性可以直接初始化或在构造函数中初始化,如果是直接初始化则其值不可在其他函数中(包括构造函数)修改

4、final 修饰函数参数

参数值不能被函数修改

5、final 修饰函数中的局部变量

局部变量第一次初始化后不可改变其值

使用final的意义

第一、为方法"上锁",防止任何继承类改变它的本来含义和实现。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采用这种做法。

第二、提高程序执行的效率,将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入"嵌入"调用里(内嵌机制)。


在java中定义全局变量是通过static来实现的,常量是通过static final来实现

 

三、this&&super

this通常指代当前对象,super指代父类

 

下面给出不完整的示例

public class Father {
	//public static int age = 32; static成员和static块加载顺序为声明先后
	static{
		System.out.println("father的静态块init");
		//name="卫庄"; error
		age = 30;
		//this.age=30; error
	}
	
	public Father(){
		this.name = "卫庄";
		height=180;
		//weight = 160; error
		System.out.println("father的构造函数初始化");
	}
	
	public String name;
	public static int age;
	public static final String sex = "男";
	public final int height;
	public final int weight=150;
	
	public void run(){
		//static int i = 1; error
		System.out.println("father run");
	}
	
	public final void sleep(){
		System.out.println("father sleep");
	}
	
	public static void eat(){
		int i = 1;
		final int a = 3;
		//a = 4 ; error 
		//this.name = "father"; error
		//name = "father"; error
		age = 32;
		System.out.println("father eat");
		System.out.println(age);
	}
	
}

 

public final class Son extends Father{
	static{
		System.out.println("son的静态块init");
		age = 13;
	}
	
	public Son(){
		super();
		name = "盖聂";
		System.out.println("son的构造函数初始化");
	}
	
	public void run(){
		System.out.println("son run");
	}
	
	public static void eat(){
		System.out.println("son eat");
	}
	
	/* error
	 * public void sleep(){
		System.out.println("son sleep");
	}*/
	
	public static void main(String []args){
		Father f = new Son();
		System.out.println(Father.age);
		System.out.println(Son.age);
		System.out.println(f.name);
		System.out.println(f.height);
		Father.eat();
		f.sleep();
		f.run();
		f.eat();
	}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值