Javase | 关键字、方法、Java程序的加载和执行原理

关键字

  1. abstract:用于定义抽象类或抽象方法。
  2. boolean:用于声明布尔类型变量或方法返回值。
  3. break:用于跳出循环或switch语句。
  4. byte:用于声明字节型变量。
  5. case:用于switch语句中的选择分支。
  6. catch:用于处理try块中抛出的异常。
  7. char:用于声明字符型变量。
  8. class:用于定义类。
  9. const:用于声明常量。
  10. continue:用于结束当前循环迭代并开始下一次迭代。
  11. default:用于switch语句中的默认分支。
  12. do:用于构成do-while循环。
  13. double:用于声明双精度浮点型变量。
  14. else:用于if语句中的条件分支。
  15. extends:用于表示类的继承关系。
  16. final:用于声明常量或方法为最终不可修改的。
  17. finally:用于定义在try-catch-finally结构中的异常处理代码块。
  18. float:用于声明单精度浮点型变量。
  19. for:用于构成for循环。
  20. if:用于条件判断语句。
  21. implements:用于表示类实现接口。
  22. import:用于导入包或类。
  23. instanceof:用于判断一个对象是否是某个类的实例。
  24. int:用于声明整数型变量。
  25. interface:用于定义接口。
  26. long:用于声明长整数型变量。
  27. new:用于创建对象或数组。
  28. package:用于定义包。
  29. private:用于表示私有访问权限。
  30. protected:用于表示受保护访问权限。
  31. public:用于表示公共访问权限。
  32. return:用于从方法中返回值。
  33. short:用于声明短整数型变量。
  34. static:用于表示静态成员变量或静态方法。
  35. super:用于表示对父类对象的引用。
  36. switch:用于构成switch语句。
  37. synchronized:用于表示线程同步。
  38. this:用于表示当前对象引用。
  39. throw:用于抛出异常。
  40. throws:用于声明方法可能抛出的异常类型。
  41. transient:用于标记某个类的成员变量,表示这个成员变量不能被对象序列化。
    用于表示非持久性对象属性,即对象序列化时不需要保存的属性。
  42. try:用于定义异常处理代码块。
  43. void:用于表示无返回值的方法类型。
  44. volatile:用于表示变量的可见性,即保证多线程对变量的操作一致性。
  45. while:用于构成while循环。
  46. native:表示该方法不是用Java实现的,而是用其他语言(如C或C++)实现的。使用native关键字修饰的方法没有方法体,它只是告诉JVM该方法在外部定义,需要使用JNI(Java Native Interface)来实现。

方法:

基本语法

访问修饰符 返回类型 方法名(参数列表) {
    // 方法体
}
  • 访问修饰符:用于指定方法的访问权限,常用的访问修饰符有public、private、protected和默认(不写任何访问修饰符)。
  • 返回类型:方法返回的数据类型。如果方法不返回任何数据,则返回类型为void。
  • 方法名:方法的名称。
  • 参数列表:传递给方法的参数列表,包括参数的类型顺序参数的个数。参数是可选的,方法可以不包含任何参数。
  • 方法体:定义了方法的行为和功能。

静态方法

使用static关键字定义的方法付就是静态方法。静态方法可通过类名.方法名( )来直接调用,不需要通过实例化对象,通常用于指向一般性操作和共享资源操作。


实例方法

默认情况下,Java中的方法多是实例方法。需要通过对象实例化来调用方法。


构造方法

用于创建并初始化对象的特殊方法。构造方法的方法名必须与类名相同。一个可以类可以有多个构造方法, 每个构造方法具有不同的参数列表


方法的定义/调用

Java中方法定义的例子:

public class MethodExample {
    
    
    
    //静态方法-----在类被加载时就被调用
    // 定义一个带有两个整型参数和一个返回值的方法
    public static int addNums(int num1, int num2) {
    
    
        int sum = num1 + num2;
        return sum;
    }
    
    //静态方法
    // 定义一个带有两个字符串参数和返回值的方法
    public static String concatenateStrings(String str1, String str2) {
    
     
        String result = str1 + str2;
        return result;
    }
    
    //实例方法-----必须通过对象实例来调用
    // 定义一个带有两个浮点型参数和返回值的方法
    public double calculateAverage(double num1, double num2) {
    
    
        double average = (num1 + num2) / 2;
        return average;
    }
    
    //实例方法
    // 定义一个没有参数和返回值的方法
    public void printInfo() {
    
    
        System.out.println("Hello, World!");
    }
    
    //构造反复噶
    // 定义一个带有参数的构造函数
    public MethodExample(String message) {
    
    
        System.out.println(message);
    }
    
    
    //方法的调用:   
    public static void main(String[] args) {
    
    
       //调用静态方法: 类名.方法名
        int i = MethodExample.addNums(1,1);
        
       //调用实例方法: 实例化对象,后调用方法
        MethodExample me =new MethodExample();
        me.printInfo();        
    }
}

方法重写 /方法覆盖

  • 方法重写(Override):又被称为“ 方法的覆盖”,是指在子类中重新定义父类中已经存在的方法。子类可以根据需要改变父类方法的行为。
  • 方法重写的定义需要满足以下条件:
    • 方法名、参数列表和返回类型必须与父类中被重写的方法完全相同。
    • 重写的方法不能拥有比被重写方法更严格的访问权限。
    • 重写的方法可以抛出比被重写方法更少或更宽泛的异常,但不可以抛出新的或更严格的检查型异常。
    • 使用 @Override 注解可以帮助我们确保正确地重写了父类方法。
  • Java中方法重写的例子:
 //父类
public class Animal {
    
     
    
    public void sing() {
    
      //这个父类的方法可以被子类重写: 更改方法体内容
        System.out.println("动物会唱歌");
    }
    
    public void eat() {
    
    
        System.out.println("动物会觅食");
    }
}

 //子类继承父类
public class Dog extends Animal {
    
     
    
    @Override
    public void sing() {
    
     //重写了父类的sing()方法
        System.out.println("狗会唱歌");
    }
    
    public void eat() {
    
    
        System.out.println("狗会吃饭");
    }
}

//main()方法
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Animal animal = new Animal();
        animal.sing(); // 输出 "动物会唱歌"
        animal.eat(); // 输出 "动物会觅食"
        
        Dog dog = new Dog();
        dog.sing(); // 输出 "狗会唱歌"
        dog.eat(); // 输出 "狗会吃饭"
    }
}

方法重载

  • 方法重载(Overloading)是指在同一个类中,可以定义多个具有相同方法名但参数列表不同的方法。

  • 参数列表不同可以是参数的数量不同,或者是参数的类型不同。

  • 方法重载的定义需要满足以下条件:

    • 方法名必须相同。
    • 参数列表必须不同,包括参数的数量不同或参数的类型不同。
    • 方法的返回类型可以相同也可以不同。
  • 注意:

    • 方法名和参数列表不同的方法不构成重载。
    • 使用方法重载可以让程序更加灵活和适应不同的需求。例如,在数学计算中,可以定义多个名字相同但参数不同的方法来进行加法、减法、乘法和除法等运算。

Java中方法重载的例子:

public class Calculator {
    
    
    
    //一个add()方法
    public int add(int a, int b) {
    
     
        return a + b;
    }
    
    //又是一个add()方法
    //这两个方法有相同的方法名,但是参数列表不同,因此它们在类中是重载的.
    public double add(double a, double b) {
    
    
        return a + b;
    }
}

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Calculator calculator = new Calculator();
        //分别调用两个不同的add()方法
        int result1 = calculator.add(10, 20);
        double result2 = calculator.add(10.5, 20.5);
        
        System.out.println(result1); // 输出 30
        System.out.println(result2); // 输出 31.0
    }
}

Java程序的加载和执行原理:

Java程序非常重要的两个阶段(编译阶段、运行阶段)

编译阶段

  • 第一步:Java程序员编写符合Java语法的源代码 (.java)。

  • 第二步:使用编译器将源代码编译为字节码文件 (.class)。

  • 注意:
    ①如果编写的源代码,符合语法规则,编译会通过,才会生成.class文件,否则会报错。
    ②一个源码可以生成多个字节码文件。

    ③编译实际上是检查语法。


运行阶段

  • 第三步:将字节码文件装载进JVM中。(JVM将用类加载器将字节码文件装载进 JVM 中)。
  • 第四步:JJVM对字节码文件进行解释(解释器负责将字节码解释成本地机器码)。
  • 第五步:JVM将本地机器码交给操作系统,操作系统会执行二进制码和硬件进行交互。
  • 注意:
    运行阶段是JRE在起作用。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_70720417/article/details/132141793