java类和方法详解


一、类

1.1 基本格式

public class ClassName(){
    //成员变量 属性
    //成员方法 行为
    
    public static void 方法名(){
        //局部变量
    }
}
  • 定义类: 就是定义类的成员,包括成员变量和成员方法
  • 成员变量: 类中,方法外
  • 成员方法: 类中,方法外,无static关键字

1.2 成员变量和局部变量

局部变量

定义在方法中的变量,只在定义它的方法中有效

成员变量

定义在成员位置上的变量,成员变量在整个类中有效

1.3 成员变量和局部变量区别

  1. 定义位置不同
  • 局部变量定义在方法中
  • 成员变量定义在类中
  1. 内存存储位置不同
  • 局部变量随着方法的运行会在栈内存中出现,存储在栈内存中
  • 成员变量随着对象的出现在堆中出现,成员变量存储在堆中
  1. 初始化方式不同
  • 局部变量在定义时需要指定初始值,只有初始化之后才能使用
  • 成员变量可以不用初始化,有默认值
  1. 存活时间不同
  • 局部变量随着方法的进栈在方法所属的栈内存中存在,随着方法的出栈就消失
  • 成员变量随着对象的出现在堆中出现,随着对象的消失而消失

二、方法

2.1 基本格式

修饰符 返回值类型 方法名(参数列表){
    //代码
    return 结果;
}

位置:类中方法外

2.2 方法返回值

  1. 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)
    int a = 5;
    int b = 10;
    System.out.println("交换前:a = " + a + ", b = " + b );//a = 5, b = 10
    change(a,b);
    System.out.println("交换后:a = " + a + ", b = " + b);//a = 5, b = 10

    public static void change(int a,int b){
        int temp = a;
        a = b;
        b = temp;
        System.out.println("交换方法中:a = " + a + ", b = " + b);//a = 10, b = 5
    }
  1. 一个方法可以改变一个对象参数的状态
    int[] arr = {1,2,3,4,5};
    System.out.println("调用方法前:arr = " + arr[0]);//arr = 1
    change(arr);
    System.out.println("调用方法后:arr = " + arr[0]);//arr = 6

    public static void change(int[] arr){
        arr[0] = 6;
        System.out.println("调用方法中:arr = " + arr[0]);//arr = 6
    }
  1. 一个方法不能让对象参数引用一个新的对象
    UserVO vo1 = new UserVO();
    vo1.setUserName("张三");
    UserVO vo2 = new UserVO();
    vo2.setUserName("李四");
    System.out.println("调用方法前:vo1 = " + vo1.getUserName() + " , vo2 = " + vo2.getUserName());//vo1 = 张三 , vo2 = 李四
    change(vo1,vo2);
    System.out.println("调用方法后:vo1 = " + vo1.getUserName() + " , vo2 = " + vo2.getUserName());//vo1 = 张三 , vo2 = 李四
    
    public static void change(UserVO vo1,UserVO vo2){
        UserVO temp = vo1;
        vo1 = vo2;
        vo2 = temp;
        System.out.println("调用方法中:vo1 = " + vo1.getUserName() + " , vo2 = " + vo2.getUserName());//vo1 = 李四 , vo2 = 张三
    }

2.3 方法重载

  1. 要求必须在同一个类中(程序)。
  2. 要求方法的名称必须相同
  3. 要求方法的参数列表必须不同(个数,类型,顺序)

2.4 方法重写

子类中出现和父类一模一样的方法(返回值类型,方法名和参数列表都相同),会出现覆盖效果,称为重写。声明不变,重新实现

2.5 可变参数

  1. 格式
修饰符 返回值类型 方法名(参数类型... 形参名){
    
}

2.6 一般方法和构造方法的区别

  1. 定义格式不同:
//一般方法
修饰符 返回值类型 方法名(参数列表){
    方法体;
}

//构造方法
修饰符 构造方法名(即当前类名) (参数列表){
    方法体;
}
  1. 执行时间不同
  • 一般方法时创建对象完成后,通过对象调用
  • 构造方法是在创建对象的过程中执行,当对象创建完成,构造方法就已经执行结束。
  1. 调用次数不同
  • 一般方法可以通过对象随意的调用,没有次数限制。
  • 构造方法只有在new对象创建时被调用一次。

三、代码执行顺序

3.1 class文件的加载过程

  1. 在加载class文件的时候,JVM会从上往下逐行加载所有代码
  2. 当加载到类中的静态成员(方法,变量,静态代码块)都会加载到方法区class文件的所处静态区中。
  3. 当把所有的静态成员加载完成之后,开始给类中的所有静态成员变量默认初始化。
  4. 当类中的所有静态成员变量默认初始化之后,开始给所有静态成员变量显示赋值。
  5. 当JVM加载到静态代码块时,会将静态代码块加载到class文件的静态区中。
  6. JVM在加载到非静态的成员时,会加载到方法区的非静态区,但是对于非静态的成员变量,仅仅只是加载到方法区中,并不会开辟空间。
  7. 当类中的所有代码加载结束,开始执行静态代码块,当静态代码块执行结束表示当前类加载完成。

3.2 继承中代码执行过程

  1. 对象创建
  2. 父类静态代码块执行
  3. 子类静态代码块执行
  4. 父类构造代码块执行
  5. 父类构造方法执行
  6. 子类构造代码块执行
  7. 子类构造方法执行
  8. 成员方法执行
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章