Java关键字:static, native, final

native:

1 本地的
2 可以修饰方法
3 语法格式:

/*
 [修饰符] class 类{
	[其他修饰符]native 返回值类型 方法名([形参列表])
 }
 */

native修饰的方法,看不见方法体
native修饰的方法,不是用Java语言实现的,而是调用了底层C/C++的代码,这些代码被编译为.dll文件,让Java来执行

4 特殊:
与其他方法调用形式相同
子类可以选择对native方法进行重写

final:

final可以修饰: 类(外部类/内部类) 变量(成员变量(类变量/实例变量),局部变量) 方法(静态方法,非静态方法)

final修饰类: 表示这个类不能被继承了
final修饰方法: 表示这个方法不能被重写
final修饰变量: 表示这个变量的值不能被修改了,即"常量"(常量的命名应该所有字母都要大写 每个单词之间用_)

//final修饰成员变量
//必须在对象创建成功之前完成赋值的行为,且只能赋值一次
public class Final {
//    private final int A ; 必须保证在对象创建之前能够给A赋值
    //否则a为默认值且无法更改,没有意义,程序报错
    private final int A = 1;//直接赋值
    private final int B;//通过构造方法进行赋值
    //有参构造
    //创建对象时,传入一个实参,创建成功后,成员变成b就无法进行修改了
    public Final(int B){
        this.B = B;
    }
    //无参构造
    //当一个类中有多个构造方法时,必须保证所有构造器都要给final的成员变量赋值
    public Final(){
        B = 97;//此处b的值创建后无法进行更改
    }
}

Final修饰引用变量

public class test {
    public static void main(String[] args) {
        //final修饰引用变量
        final testclass a = new testclass();
        a.aha = 2;
        a.bha =3;
        a.show();
        System.out.println(a);
        System.out.println("============");
        //对final修饰的引用类型再次赋值
        //变量值会发生改变
        //但对象的地址无法被改变
        //a = new testclass(); ←报错
        a.aha =3;
        a.show();
        System.out.println(a);
    }
}

static

1 静态的
2 static可以修饰: 方法 、成员变量、内部类、代码块
3 修饰后的不同:
【1】这个方法,我们称为“静态方法”,或“类方法”
<1>这个静态方法,对于其他类来说可以用 [类名.方法] 进行调用,当然也可以使用"对象名.方法"进行调用(推荐使用 “类名.方法” 调用)
<2>静态方法中, 是不允许出现: this/super, 对本类的非静态属性、非静态方法直接使用代码

【2】修饰后成员变量: (不能修饰局部变量)
<1>用static修饰的成员变量,表示这个变量对该类所有对象共享
<2>static修饰的成员变量的值,存储在方法区
<3>static修饰的成员变量的get/set也是静态的
<4>如果方法中用局部变量与static修饰的成员变量同名时,在静态变量前加“类名”进行区别
<5>静态方法是不能被重写的: 静态方法在编译期间就确定了,不需要在运行时动态绑定

【3】静态代码块
<1>每一个类的静态代码块只会执行一次
<2>静态代码块在第一次使用这个类时执行(在类初始化时执行)

类初始化(执行类初始化方法): ()
一个类只有一个, 也是由编译器编译生成的, 由两部分代码组成:
静态代码块
静态变量的显式赋值
(↑按顺序执行)

☆在继承时,一个类初始化时会先检查它的父类是否初始化,如果父类没有初始化,那么会先初始化父类.(对于一个类,初始化只会执行一次)


ps: 对一个类来说, 有几个构造器就有几个实例初始化方法, 它们由编译器根据↓生成:
成员变量的显式赋值代码
非静态代码块代码
构造器

public class staticDemo {
    public static void main(String[] args) {
        //为所有对象赋一个公共的值
        staticcc.salary = 100;//所有对象共有
        staticcc a = new staticcc();
        a.age = 20;
        a.name = "马云";
        a.show();

        staticcc b = new staticcc();
        b.name="王健林";
        b.age = 20;
        b.show();
         //建议访问静态变量时,用类名.变量名 进行访问
        System.out.println(staticcc.salary);
    }
}

public class staticcc {
    public String name;
    public int age;
    //static修饰的成员变量 作为所有对象的公共属性
    public static int salary;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static int getSalary() {
        return salary;
    }

    public static void setSalary(int salary) {
        //局部变量与static修饰的成员变量同名时 用类名.变量名表示成员变量
        staticcc.salary = salary;
    }

    public void show(){
        System.out.println(name+" "+age+" "+salary);
    }
}

/*
//非静态代码块格式
[修饰符] class 类{
	{
		非静态代码块
	}
}

静态代码块格式:
[修饰符] class 类{
	static{
		非静态代码块
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值