zoukankan      html  css  js  c++  java
  • 对之前的所有的代码进行总结

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

    案例:

    /*
        类体{
            实例变量;
            实例方法;
            
            静态变量;
            静态方法;
            
            构造方法;
            
            静态代码块;
            实例语句块;
            
            方法(){
                // 局部变量
                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(){
            
        }
    }
  • 相关阅读:
    UML类图
    # linux下安装Nodejs环境
    [原创] 如何编写一份不可维护的代码
    [原创作品]观察者模式在Web App的应用
    Thinking In Web [原创作品]
    [原创作品]Javascript内存管理机制
    [小知识] 获取浏览器UA标识
    [原创作品] 对获取多层json值的封装
    Javascript 精髓整理篇之三(数组篇)postby:http://zhutty.cnblogs.com
    [原创作品]一个实用的js倒计时器 postby:zhutty.cnblogs.com
  • 原文地址:https://www.cnblogs.com/xlwu/p/13053060.html
Copyright © 2011-2022 走看看