java基础之关键字篇

本文详细探讨了Java中的关键字,包括static、final、this、super、finally、finalize、volatile和assert的用法和特点。static关键字用于声明静态变量和方法,final用于创建不可变变量和防止方法覆盖,this表示当前对象引用,super用于访问父类成员,finally确保代码块的执行,volatile保证线程间可见性但不保证原子性,assert用于测试断言。Java不支持goto关键字。
摘要由CSDN通过智能技术生成

static关键字

static关键字修饰的变量和方法可通过类名直接访问
static 关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

1.static 变量

静态变量只会被分配单一的存储空间,其所有实例化对象的此静态变量指向同一存储空间

public class Test {
    static int i=47;
    public static void main(String[] args){
        Test st1 = new Test();
        Test st2 = new Test();
        i++;
        System.out.println(st1.i+"--"+st2.i);   

    }

} 

//输出:
//48--48

2.static 方法

  • 静态方法中不能用this和super关键字

因为this表示调用这个函数的当前对象的引用,而静态方法加载调用时,对象还不一定存在的,super同理

  • 不能直接访问所属类的实例变量和实例方法(就是静态方法不能访问不带static的成员变量和成员方法)

对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象

  • 因为static方法独立于任何实例,因此static方法必须被实现,不能是抽象的abstract.

抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类

Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。

3.static 代码块

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次

public class Test {
     private static int a; 
        private int b; 

        static { 
                Test.a = 3; 
                System.out.println(a); 
                Test t = new Test(); 
                t.f(); 
                t.b = 1000; 
                System.out.println(t.b); 
        } 

        static { 
                Test.a = 4; 
                System.out.println(a); 
        } 

        public static void main(String[] args) { 
                // TODO 自动生成方法存根 
        } 

        static { 
                Test.a = 5; 
                System.out.println(a); 
        } 

        public void f() { 
                System.out.println("hhahhahah"); 
        } 
}

/*output:
3
hhahhahah
1000
4
5
*/

final关键字

在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了。final是java的关键字,它所表示的是“这部分是无法修改的”。不想被改变的原因有两个:效率、设计。使用到final的有三种情况:数据、方法、类。

1.final变量

有时候数据的恒定不变是很有用的,它能够减轻系统运行时的负担

1、编译期常量,永远不可改变。
2、运行期初始化时,我们希望它不会被改变。

  • final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误
  • final变量定义的时候,可以先声明,而不给初值,这中变量也称为空白final,无论什么情况,编译器都确保空白final在使用前必须被初始化,但是空白final在关键字final的使用上提供了更大的灵活性,为此一个类中的final变量就可以做到根据对象而有所不同,却保持其恒定不变的特性。

对于基本类型,final使数值恒定不变,而用于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而对象自身却是可以被修改的。这一限制也使用数组,它也是对象。

 class Person {
    private String name;

    Person(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class FinalTest {
    private final String final_01 = "chenssy";    //编译期常量,必须要进行初始化,且不可更改
    private final String final_02;                //空白final,必须在构造函数中赋值,在实例化一个对象时被初始化
    final ArrayList<String> arry=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值