搜尋
首頁Javajava教程Java重要的關鍵字有哪些

Java重要的關鍵字有哪些

May 25, 2023 pm 05:16 PM
java

    1.extends

    • #用於類別繼承類,用法:class 子類別名稱extends 父類別名稱{}

    class Animal{}//父类
    class cat extends Animal{}//子类用extends实现继承

    #注意:一個類別只能用extends關鍵字宣告繼承一個父類別

    • 用於介面繼承接口,用法:interface 介面名稱extends 介面名稱{}

    interface Clippers {}
    interface Warriors {}
    interface Lakers extends Clippers,Warriors {}//接口类用extends关键字继承其他接口(可多个)

    注意:

    • #介面不能用extends宣告繼承別的類別

    • 介面只能用extends宣告繼承別的介面,且可以繼承多個介面

    • #當一個類別用implements實作了一個介面時,不僅要實作該介面的方法,也要實作該介面繼承的介面的方法

    2.implements

    • #用來宣告一個類別實作了一個介面類別,用法:class 類別名稱implements 介面名稱{}

    #
    class Nets implements Clippers,Warriors{}//用implements关键字声明实现了两个接口类

    ##注意:

    • 一個

      普通類別可以implements關鍵字宣告實作多個介面,但必須實作所有介面中的所有方法

    • 抽象類別實作接口,可以不用實作介面的方法(因為抽象類別中可以有抽象方法)

    • #意義:可以用implements關鍵字宣告實作多個介面來實作類似多重繼承

    3.final

    使用方法:

    • #修飾

      #類別,使該類別不能被繼承

    • 修飾

      方法,使該方法不能被子類別重寫(仍可以被繼承呼叫

    • 修飾

      屬性,使該屬性的值不能被修改(使為常數

    • 修飾

      局部變數,使該變數不能被修改(局部常數

    使用細節:

    final修飾的屬性在定義時必須賦初值,且不能修改,可以在下列位置賦初值

    • 定義時(顯示初始化)

    • 在建構器中

    • 在程式碼區塊中

    static final:全域常數

    • 如果

      final修飾的屬性是靜態(static)的,則不能在建構器中賦初值,原因:靜態屬性要求在類別載入時就有初值,而建構器在建立物件時才被調用,所以可能導致調用靜態屬性時沒有建立物件而沒有給靜態屬性賦值

    • final不能修飾建構方法,沒有意義

    • finalstatic同時修飾的屬性在呼叫時不會導致類別的載入,效率更高

    #4.native

    ##基本介紹:

    native

    用來修飾方法,被修飾的方法即成為了一個Java呼叫但非Java程式碼實作的介面(本地方法) ,該方法在外部可以用任何語言去實現

    "A native method is a java method whose implementation is provided by non-java code."

    使用方法:

    native

    修飾方法的位置必須在方法傳回型別之前,和方法存取修飾符位置沒有要求,如:public native int hashCode();

    #native

    細節:

    • native方法沒有方法體

      ,也沒有
    • {}
    • #用native

      修飾後的方法
    • 不能用
    • abstract修飾,因為abstract指明該方法無實現體,而native方法是有實作體的,只是用非Java程式碼實作的native

      方法的回傳型別可以是
    • 任意型別

    如果一個有###native###方法的類別被###繼承###,###子類別會繼承這個######native# #####方法,並且可以用######java######語言重寫################使用###JNI(Java Native Interface ) ###與其他語言互動###

    JNIJava平台的一部分,它允许Java代码和其他语言写的代码进行交互。

    Java重要的關鍵字有哪些

    使用步骤:

    • 编写带有native方法的java类,生成.java文件

    • 使用javac命令编译生成.class文件

    • 使用javah -jni 类名 生成.h文件

    • 使用C/C++(或者其他编程语言)实现native方法,创建.cpp(或其他)文件

    • C/C++编写的文件创建动态链接库(生成DLL文件)

    • native方法中使用System.loadLibrary()方法加载动态库,将DLL文件名作为参数传入,这时候再运行.java程序即可实现对本地方法的调用

    详细步骤参考

    native意义:

    Java无法直接访问到操作系统底层(如系统硬件),但通过使用native关键字修饰方法可以借用其他的语言来扩展Java程序的功能,提高程序的效率

    5.static

    修饰变量,成为静态变量或者类变量

    • 使用方法:访问修饰符+``static``+数据类型+变量名

    注意事项:

    • 静态变量会被类的所有对象实例共享,并且在类加载的时候就会初始化。

    • 静态变量的访问方法(遵守相关访问权限):类名.静态变量名 或者 对象名.静态变量名

    修饰方法,成为静态方法或者类方法

    • 使用方法:访问修饰符+``static``+返回数据类型+方法名+{}

    注意事项:

    • 调用方法(遵守相关访问权限):类名.静态方法名 或者 对象名.静态方法名

    • 静态方法普通方法都是随着类加载而加载,将结构信息存储在方法区

    • 静态方法中不允许使用thissuper关键字

    • 静态方法中只能访问静态变量静态方法

    • 普通方法可以访问静态成员和普通成员

    • 修饰代码块,成为静态代码块

    静态代码块会在类加载时被加载,优先级和静态属性一样,有多个静态代码块和静态属性时,初始化顺序按定义顺序执行

    好处:static关键字的使用,将类中的一些成员修饰成静态的,这样我们不需要创建该类的对象就可以调用该成员,大大提高了编程效率

    6.transient

    基本介绍:

    transient用于修饰实现了Serilizable接口的类中的成员变量,在该类的实例对象进行序列化处理时transient修饰的成员变量不会进行序列化

    使用例子:

    import java.io.FileOutputStream;
    
    import java.io.IOException;
    
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    public class outStream {
        public static void main(String[] args) throws IOException {
            String filePath = "d:\Cat.txt";
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
            oos.writeObject(new Cat("小花猫", 3));
            oos.close();
        }
    }
    class Cat implements Serializable {
        private String name;
        private int age; //没有用transient修饰
        public Cat(String name, int age) {
            this.name = name;
            this.age = age;
        }
        @Override
        public String toString() {
            return "Car{" +
    
                    "name='" + name + ''' +
    
                    ", age=" + age +
    
                    '}';
        }
    }
    public class inStream {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            String filePath = "d:\Cat.txt";
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
            System.out.println(ois.readObject());
            ois.close();
        }
    }

    Java重要的關鍵字有哪些

    Java重要的關鍵字有哪些

    可以在Cat.txt文件内看到两个成员变量都能被序列化,并且能被反序列化读出信息。

    当小花猫觉得自己的年龄是隐私不想被读出时,transient修饰成员变量age:

    ......
    private String name;
    private transient int age; //使用transient修饰
    ......

    Java重要的關鍵字有哪些

    Java重要的關鍵字有哪些

    这时在Cat.txt文件中可以看到只有name一个成员变量被序列化,反序列化后的成员变量age读出的是int类型的默认值,说明对于transient修饰的成员变量,在类的实例对象序列化的过程中会被忽略

    transient细节

    • transient修饰的成员变量可以理解为:不会参与进行对象的序列化和反序列化过程,生存周期仅存于调用者的内存不会写进磁盘里进行持久化

    • static修饰的成员变量(静态变量)也是不可序列化的,不论被transient修饰与否

    因为序列化是保存的实例对象的状态,而静态变量保存的是类的状态

    • transient关键字只能修饰变量,不能修饰方法和类

    • transient关键字不能修饰局部变量

    • transient关键字修饰的是自定义类的变量,则该类需要实现Serilizable接口

    注意:

    实现Serilizable接口的类的实例对象是自动进行序列化的,如果序列化对象的类实现的是Externalizable接口,则序列化不会自动进行,需要实现接口内的方法指定要序列化的变量,这时与有无Transient修饰无关

    7.synchronized

    基本介绍:

    关键字synchronized可以保证在同一时刻只有一个线程可以执行被synchronized修饰的方法或代码块

    线程同步

    程序中多个线程都要使用同一个方法,而这个方法用synchronized进行了修饰,在多个线程调用这个方法时必须遵循同步机制

    线程同步机制

    当一个线程使用synchronized修饰的方法时,其他线程想使用这个方法时就必须等待,直到这个线程使用完synchronized方法

    synchronized使用方法:

    • 普通同步方法:public synchronized void m () {}

    public class syn implements Runnable {
        static int i = 0;
        public static void main(String[] args) throws InterruptedException {
            syn test = new syn();
            Thread t1 = new Thread(test);
            Thread t2 = new Thread(test);
            t1.start();
            t2.start();
        }
        public synchronized void increase() {//被synchronized修饰的同步方法
            System.out.println(Thread.currentThread().getName() + "调用:" + i++);
    
        }
        @Override
        public void run() {
            for (int j = 0; j < 100; j++) {
                increase();
            }
        }
    }

    Java重要的關鍵字有哪些

    两个线程同时调用一个对象的一个同步方法,由于一个对象只有一把锁,所以只有一个线程能够获得该对象的锁,另一个线程无法获得,就不能调用该对象的synchronized方法,需要等对象被释放后才能调用

    从运行结果中可以证明线程1抢到了锁,线程0必须等待线程1执行完毕,否则不能访问该同步方法。

    • 静态同步方法:public static synchronized void m () {}

    public class syn implements Runnable {
        static int i = 0;
        public static void main(String[] args) throws InterruptedException {
            syn test = new syn();
            syn test1 = new syn();
            Thread t1 = new Thread(test);//传入实例对象test
            Thread t2 = new Thread(test1);//传入实例对象test1
            t1.start();
            t2.start();
        }
        public static synchronized void increase() {//同步静态方法
            System.out.println(Thread.currentThread().getName() + "调用:" + i++);
        }
        @Override
        public void run() {
            for (int j = 0; j < 100; j++) {
                increase();
            }
        }
    }

    Java重要的關鍵字有哪些

    虽然两个线程实例化了两个不同的对象,但是synchronized修饰的是静态方法,两个线程仍然发生了互斥,因为静态方法是依附与类的而不是对象,线程1先抢到了类的锁,而线程0必须等待线程1执行完毕释放才能调用同步方法

    • 同步代码块:synchronized(object) {}

    public class syn implements Runnable {
        static Object object = new Object();//共享对象
        public static void main(String[] args) throws InterruptedException {
            syn test = new syn();
            syn test1 = new syn();
            Thread t1 = new Thread(test);
            Thread t2 = new Thread(test1);
            t1.start();
            t2.start();
    
        }
        @Override
        public void run() {
            synchronized (object) {//代码块用静态成员变量上锁
                for (int j = 0; j < 100; j++) {
                    System.out.println(Thread.currentThread().getName() + "调用第" + j + "次");
                }
            }
        }
    }

    Java重要的關鍵字有哪些

    同步代码块用两个实例变量共享的静态成员object对象来上锁,虽然是两个线程实例化两个不同的对象,但是对整个syn类来说只有一个共享的object对象,所以只有一把锁,每当有线程来访问代码块时需持有锁,对象锁被其他线程持有时需等待。线程1需要等线程0执行完毕才能访问同步代码块

    同步的局限性:

    由于同步的方法或代码块只能同一时间让一个线程访问,所以会导致程序的执行效率降低

    尽可能synchronized修饰的范围最小化,来减少互斥对程序执行带来的影响

    8.volatile

    基本介绍:

    volatile用于修饰变量,用volatile修饰的变量的值被某个线程修改时,会强制将修改的值立即写入主存中,主存中的值更新会使得缓存中的该变量的值失效,对比与非volatile变量,可能会被其他线程读取到更新前的值。

    使用方法:

    //现在有线程1和线程2同时执行下列代码
    int i = 0;
    i = i + 1;

    执行完毕后预想的结果是 i = 2;但是可能存在这样一种情况:两个线程先同时把i的值读取到自己的工作内存中,然后再分别执行 i = i + 1 的操作,再将结果写入主存,这样两个线程写入的都是 i = 1,最终 i 的结果是 1 ,而不是 2

    但如果 i 是 volatile 修饰的变量就会不一样了,在一个线程修改 i的值后,会立即强制在主存中更新 i 的值,这样会导致另一个线程的工作内存中 i 的缓存值无效,所以另一个线程再次从主存中读取新的 i 的值,这样保证了i的值是最新并正确的

    并发编程的三大概念:

    • 原子性:执行一个操作时,要么全部步骤执行完毕且不被中断,要么就不执行

    x = 100;//是原子性操作
    y = x;//不是原子性操作,可分解为:1.先读取x的值    2.将x的值写入主存
    x ++;//不是原子性操作,可分解为:1.读取x的值    2.进行加一操作    3.写入主存
    • 可见性:多个线程对同一个变量进行操作时,一个线程修改了变量的值,其他线程能立即看到修改的值

    • 有序性:程序执行的顺序按照代码的先后顺序执行

    volatile的意义

    • 保证了不同线程对变量进行修改时的可见性:因为对于volatile变量来说,被修改后新值对其他线程来说是立即可见的

    • 保证了有序性volatile禁止了指令重排,它能保证在对volatile修饰的变量进行操作时,之前的代码语句已经全部被执行,并且后面的语句都未执行,但是对其他语句的顺序是不做保证的

    注意: volatile不能保证原子性,因为不能保证对变量的操作是原子性操作

    9.this

    • 在方法中修饰属性,this理解为当前对象,用来区别成员方法和形参,通常省略

    • 修饰方法,this理解为当前对象,通常省略;不能在静态方法中使用

    • 调用构造器,在构造器中使用this(形参列表)显式调用指定的其他构造器

      • 必须在首行调用其他构造器

      • 一个构造器中不能调用多个其他构造器

      • 不能在构造器中调用递归调用,不能成环调用

    10.super

    super可以理解为:父类的

    • 修饰属性:去父类中找对应属性,用来区分子父类重名的属性

    • 修饰方法:调用重写之前的方法

    • 调用构造器:使用super(形参列表)指定调用父类构造器

      • super(形参列表)必须放在构造器的首行

      • super(形参列表)this(形参列表)只能二选一

      • 在构造器首行如果没有显式声明super(形参列表)this(形参列表)则默认调用父类的空参构造器super()(如果此时父类中没有空参构造器就会报错)

    • 不能在静态方法中使用

    当一个方法和属性被static属性修饰时,这些方法和属性是优先于对象加载进入内存的,是随着类的加载而加载的;this是当前对象的引用,super是指父类的引用,当静态方法加载进内存进栈时,如果在静态方法中有this和super关键字时,this和super也被加载到了内存,但是这个时候并没有对象的引用,this和super没有初始化,所有编译会报错。

    10.1.子类对象实例化的过程

    Java重要的關鍵字有哪些

    11.存取修飾符

    Java重要的關鍵字有哪些

    public修飾類別:

    • ##一個類別中最多只能有一個public類,且檔名要和public類一致

    • 如果沒有public類,檔名可以任意

    以上是Java重要的關鍵字有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
    JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?May 02, 2025 am 12:25 AM

    JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

    Java的較新版本如何解決平台特定問題?Java的較新版本如何解決平台特定問題?May 02, 2025 am 12:18 AM

    Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

    說明JVM執行的字節碼驗證的過程。說明JVM執行的字節碼驗證的過程。May 02, 2025 am 12:18 AM

    JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。

    平台獨立性如何簡化Java應用程序的部署?平台獨立性如何簡化Java應用程序的部署?May 02, 2025 am 12:15 AM

    Java'splatFormIndepentEncealLowsApplicationStorunonAnyOperatingsystemwithajvm.1)singleCodeBase:writeandeandcompileonceforallplatforms.2)easileupdates:updatebybytecodeforsimultanane deployment.3)testOnOneOnePlatForforurouniverSalpeforuluniverSalpehavior formafforulululyiversalivernave.444.44.444

    Java的平台獨立性如何隨著時間的流逝而發展?Java的平台獨立性如何隨著時間的流逝而發展?May 02, 2025 am 12:12 AM

    Java的平台獨立性通過JVM、JIT編譯、標準化、泛型、lambda表達式和ProjectPanama等技術不斷增強。自1990年代以來,Java從基本的JVM演進到高性能的現代JVM,確保了代碼在不同平台的一致性和高效性。

    在Java應用程序中緩解平台特定問題的策略是什麼?在Java應用程序中緩解平台特定問題的策略是什麼?May 01, 2025 am 12:20 AM

    Java如何緩解平台特定的問題? Java通過JVM和標準庫來實現平台無關性。 1)使用字節碼和JVM抽像操作系統差異;2)標準庫提供跨平台API,如Paths類處理文件路徑,Charset類處理字符編碼;3)實際項目中使用配置文件和多平台測試來優化和調試。

    Java的平台獨立性與微服務體系結構之間有什麼關係?Java的平台獨立性與微服務體系結構之間有什麼關係?May 01, 2025 am 12:16 AM

    java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸縮性和便攜性。 1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

    GRAALVM與Java的平台獨立目標有何關係?GRAALVM與Java的平台獨立目標有何關係?May 01, 2025 am 12:14 AM

    GraalVM通過三種方式增強了Java的平台獨立性:1.跨語言互操作,允許Java與其他語言無縫互操作;2.獨立的運行時環境,通過GraalVMNativeImage將Java程序編譯成本地可執行文件;3.性能優化,Graal編譯器生成高效的機器碼,提升Java程序的性能和一致性。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    Dreamweaver Mac版

    Dreamweaver Mac版

    視覺化網頁開發工具

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版