对之前的所有的代码进行总结

总结所有的变量怎么访问,总结所有的方法怎么访问!!!! 总结一下到目前为止我们在一个类中都接触过什么了。

案例:

/*
    类体{
        实例变量;
        实例方法;
        
        静态变量;
        静态方法;
        
        构造方法;
        
        静态代码块;
        实例语句块;
        
        方法(){
            // 局部变量
            int i = 100;
        }
    }
*/
public class Review{ //// 类加载机制中,是这样的:在程序执行之前,凡是需要加载的类全部加载到JVM当中。
    // 先完成加载才会执行main方法
    static{    
        System.out.println("Review类加载时执行!");
    }
    
    // 静态变量 程序入口
    public static void main(String[] args){
        
        // 局部变量
        int i = 100;
        
        // 完成一个对象的一连串动作。
        // 一个学生在教室先学习,学习完成之后去餐厅吃饭。
        Student s1 = new Student();
        
        // 错误: 此处不允许使用 '空' 类型
    // System.out.println(s1.study());
        s1.study();
        
        Student s2 = new Student();
    }
}

// 学生类
class Student{
    
    static{    
        System.out.println("Studen类加载时执行!");
    }
    // 实例变量
    // 学号
    private int no;
    // 姓名
    private String name;
    
    // 学生会有静态变量吗?
    // 类级别的属性
    static String job = "学习";
    
    // 实例语句块
    {
        System.out.println("实例语句块,构造方法执行一次,这里就执行一次。");
    }
    
    // 封装
    // 实例方法 getter and setter
    public int getNo(){
        return no;
    }
    
    public void setNo(int no){
        this.no = no;
    }
    
    public String getName(){
        return name;
    }
    
    public void setName(String name){
        this.name = name;
    }
    
    // 构造方法
    public Student(){
        // 假设调用无参数的构造方法,默认创建的学生学号是100,名字是zhangsan
        this(100,"zhagnsan"); // this() 在这里也使用了。
    }
    
    public Student(int no,String name){
        this.no = no;    // 这里使用了this
        this.name = name;
    }
    
    // 实例方法
    public void study(){
        
        // 私有的是可以在本类中访问的。在其他类中不行,必须使用getter setter方法
        
        // System.out.println(this.name + "正在努力的学习!");
        // System.out.println(name + "正在努力的学习!");
        
        // 在实例方法中调用本类其他的实例方法。
        // System.out.println(this.getName() + "正在努力的学习!");
        System.out.println(getName() + "正在努力的学习!");
        
        // 方法执行到此处表示学习完成了,去吃饭。
        // this.eat();
        // this. 可以省略
        // 编译器检测到eat()方法是实例方法,会自动在eat()方法前添加 this.
        eat();
        
    }
    
    public void eat(){
        
        System.out.println(this.getName() + "在餐厅吃饭呢!!!");
        
        // 调用静态m1()方法
        // 静态方法使用"类名." 的方式访问
        // Student.m1();
        
        // 类名. 可以省略吗? 可以
        // java编译器会自动在m1()方法之前添加“类名.”,因为检测到m1()方法是一个静态方法。
        
        m1();
    }
    
    
    // 静态方法
    public static void m1(){
        System.out.println("Student's m1 method execute!");
        m2();
    }
    
    public static void m2(){
        System.out.println("Student's m2 method execute!");
        // 编译器检测到job是一个静态变量,所以这里会自动在job前添加:Studen.
        System.out.println("工作性质:" + job);
    }
}

 

执行结果如下:
Review类加载时执行!
Studen类加载时执行!
实例语句块,构造方法执行一次,这里就执行一次。
zhagnsan正在努力的学习!
zhagnsan在餐厅吃饭呢!!!
Student's m1 method execute!
Student's m2 method execute!
工作性质:学习
实例语句块,构造方法执行一次,这里就执行一次。
 
案例2:
/*
    程序再怎么变化,万变不离其宗,有一个固定的规律:
        所有的实例相关的都是先创建对象,通过“引用.”来访问。
        所有的静态相关的都是直接采用“类名.”来访问。
    
    你有发现一些问题吗?
        总有一些是需要记忆的,在这些记忆的基础之上进行分析。
    
    大结论:
        只要负责调用的方法a和被调用的方法b在同一个类当中
            “this.”可以省略  
            “类名.” 可以省略
*/
public class Review02{
    
    int i = 100;
    
    static int j = 100;
    
    public void m1(){
        
        // 访问其他类中的静态方法。
        T.t1();
        
        // 访问其他类中的实例方法。
        T t = new T();
        t.t2();    
    }
    
    public void m2(){}
    
    public void x(){
        m1(); // this.m1();
        m2(); // this.m2();
        m3(); // Review02.m3();
        m4(); // Review02.m4();
        
        System.out.println(i); // System.out.println(this.i);
        System.out.println(j); // System.out.println(Review02.j);
    }
    
    public static void m3(){}
    
    public static void m4(){}
    
    // 问? 你怎么分析这个程序?
    /*
        第一步:
            main方法是静态的,JVM调用main方法的时候直接采用的是“类名.”的方式,所以main方法中没有this。
        
        第二步:
            m1() 和 m2 方法是实例方法,按照java语法规则来说,实例方法必须先new对象,通过“引用.”的方式访问。
    */
    
    public static void main(String[] args){
        Review02 r1 = new Review02();
        r1.m1();
        r1.m2();
        // m1();
        // m2();
        m3(); // Review02.m3();
        m4(); // Review02.m3();
        
        // System.out.println(i);// 报错 错误: 无法从静态上下文中引用非静态 变量 i  因为在static类中,不能直接调用实例变量,需要先new对象,new对象。
        System.out.println(r1.i); // 这样就可以了。
        System.out.println(j);// System.out.println(Review02.j);
        
        // 看到这里,你是不是心里咯噔一下子,懵了,诶????  实例变量,静态变量,傻傻分不清楚了。
        // 不是的  下面这个k大哥是局部变量,局部变量访问的时候是不需要“xxx.”的
        int k = 10000;
        System.out.println(k);
        
    }
}

class T{
    
    // 静态方法
    public static void t1(){
        
    }
    
    // 实例方法
    public void t2(){
        
    }
}

 

posted @ 2020-06-06 00:09  xlwu丶lz  阅读(184)  评论(0编辑  收藏  举报