Java基础疑点分析 1、静态方法与静态变量、静态代码块 2.Java中final的作用和用法

1、静态方法与静态变量、静态代码块
1.1 静态方法
静态方法
静态方法是使用static关键字修饰的方法,在类加载的时候被加载和分配内存,不自动进行销毁,会一直存在内存中,直到JVM关闭。
非静态方法
非静态方法是不使用static关键字修饰的方法,又称实例化方法,在类加载的时候没有占用内存,只有在创建类的实例对象后,对象调用该方法才分配内存。当类对象被JVM回收后,也跟着消失。
两者的区别
1、在静态方法中只能调用同类中的其他静态成员和静态方法,不能调用非静态成员和非静态方法,这是因为非静态成员和非静态方法必须先创建类的实例对象后才可使用 ,而静态方法在使用前不用创建任何实例对象。而非静态方法没有此限制。
2、在调用静态方法时,既可以使用类名.变量名的方式调用,也可以使用对象名.方法名的方式调用,但使用前者居多。而非静态方法只能使用对象名.方法名的方式调用,也就是说调用静态方法不必创建对象。
3、静态方法不能以任何方式引用this和super关键字,因为静态在被调用前不用创建类的实例对象,当静态方法被调用时,this所引用的对象根本没有产生。
作为程序的入口,main()方法是一个典型的静态方法,它遵循一般静态方法的原则,在类加载的时候就被加载在栈中。
1.2、静态变量
静态变量
用static关键字修饰的变量是静态变量。
非静态变量
不用static关键字修饰的变量是非静态变量,
两者区别:
1、静态变量可以直接用类名.变量名来调用,也可以用对象名.方法名的方式调用,只是不需要。而非静态变量需要先new出来对象在调用,所以只能使用对象名.方法名的方式调用。
2、只要程序加载了类的字节码文件(.class文件),不用创建任何实例对象,静态变量就会被分配空间,而且只分配一次。在内存空间中只有一份,也永远只有一份,所有实例对象共享。而非静态变量每创建一个实例对象时,就会分配一次内存。
3、静态变量存放在栈中方法区,而非静态变量存放在堆中。
4、静态变量是属于整个类的变量而不是属于某个对象的。生命周期取决于类,而非静态变量属于实例对象,当对象被垃圾回收后,该静态变量也将不存在了,也就不在内存中了。
类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;
而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

public class TestDemo {
	public static void main(String[] args) {
		Test t1 = new Test();
		Test t2= new Test();
	}
	
}
 
class Test{
	static int i = 1;	//静态变量
	int j = 1;		//非静态变量
	public Test(){
		i++;
		j++;
		System.out.println(i);
		System.out.println(j);
	}
}
运行结果:  2:2
		  3:2
		 

注意:不能把任何方法体内的变量声明为静态变量。
1.3、静态代码块
static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能,静态代码块可以置于类中的任何地方,类中可以有多个静态代码块,当类加载时,静态代码块会按顺序被加载执行,且只执行一次,静态代码块通常被用来进行类属性的初始化。下面就是静态代码块的基本格式:

static
{
	.......
}

静态代码块与静态方法的区别是:静态代码块是自动执行的,静态方法是被调用的时候才执行的。

2、Java中final的作用和用法
1、当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法,在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。
2、 final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写。
在这里插入图片描述
3、当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以改变的。
注意:当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。而对于普通变量的访问却需要在运行时通过链接来进行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值