静态static关键字 ,final关键字

本文详细介绍了Java中的static关键字,包括其用法、特点以及常见误区。解析了static修饰的属性、方法、代码块等的不同之处,并对static与final进行了对比。

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

1.static关键字

1.1用法:

用于修饰属性,方法,块,内部类。

1.2 特点:

1.被static修饰的方法中,不能访问非静态的属性和方法

2.被static修饰的方法和属性中,会被整个程序所共享

3.被static修饰的方法和属性,会优先被加载

4.被static修饰的方法和属性,无需创建对象,直接使用类名就可以调用。

1.3 static方法

static方法被称为静态方法,因为不需要创建对象,所以对于静态方法来说是没有this的,并且由于没有对象也就没有this,所以根据这个特性又可知道静态方法不能访问非静态成员方法和成员变量。因为非静态成员方法和成员变量都需要依赖具体的对象才能调用。所以静态方法不能访问非静态方法和属性,但是非静态方法可以访问非静态方法和属性。

package HelloWorld;

public class Sta {
    	//非静态变量
    	private String str1 ="property";
    	//静态变量
    	private static String str2 ="staticProperty";
    	
    	public Sta() {
    		
    	}
    	//非静态方法
    	public void print1() {
    		System.out.println(str1);
    		System.out.println(str2);
    		print2();
    	}
    	
    	//静态方法
    	public static  void print2() {
    		//这一句报错,报错信息是Cannot make a static reference to the non-static field str1
    		System.out.println(str1);
    		System.out.println(str2);
    		/*
    		 * 调用非静态的方法会报错,
    		 * Cannot make a static reference to the non-static method print1() from the type MyObject
    		 */
    		print1();
    	}
    }

}

1.4 static变量

static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响

1.5 static代码块(静态代码块)

static代码块可以放在类中任何地方。

静态代码块可以优化程序性能

为什么?

只会在类加载的时候执行一次。

2.static一些误区:

2.1.static关键字会改变类中成员的访问权限吗?

答:不会,static不会影响到变量和方法的作用域。在java中能影响的访问权限只有 public private protected (包括包访问权限)这几个关键字。

2.2 能通过this访问静态成员变量吗?

不能,因为对于静态方法来说,是没有对象的,没有this的。

2.3 static能作用于局部变量么?

答:static不允许修饰局部变量。这是规定

2.4 static,与final的对比

答: static 修饰的变量在类加载时就会被初始化,不会因为对象的创建而再被加载,并且被static修饰 的变量只会被初始化一次。

3.final关键字

修饰类:被final修饰的类不能有子类

修饰方法: 被final修饰的方法不能被重写

修饰变量:被final修饰的变量其值不能被修改。可修饰常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值