美文网首页java基础
java基础-day08-面向对象2.0

java基础-day08-面向对象2.0

作者: 触手不可及 | 来源:发表于2021-06-25 08:47 被阅读0次

    面向对象2.0

    1. this关键字

    1.1 this关键字到底是一个什么
        this关键字表示调用当前方法的类对象本身,哪一个类对象调用当前方法,this关键字就表达哪一个对象。
    【注意】
        不管是哪一种开发语言,只要两个内存空间首地址一致,就表示同一个空间!!!同一个内容!!!
    
    1.2 this关键字用途
    区分成员变量和参数变量
        在构造方法中,参数名字和成员变量名字冲突,这里可以使用this关键字明确告知编译器,this.fieldName 对应的就是成员变量,非参数变量。
    
    this关键字调用其他构造方法
    
    public Student(int id, String name, char gender) {
        /*
        就近原则问题
        id = id;
        name = name;
        gender = gender;
        这里是因为成员变量名字和参数变量名字冲突,导致编译器
        在运行代码的过程中,会采用就近原则方式,同名变量情况下
        会只使用参数变量
        */
        
        // 使用this关键字来明确当前操作的变量是成员变量,非参数变量
        // 当前this表示 new 关键字 + 构造方法创建的类对象本身
        this.id = id;
        this.name = name;
        this.gender = gender;
        System.out.println("Constructor:" + this);
    }
    

    2. 成员变量和局部变量

    2.1 局部变量概述
    除class大括号之外,其他大括号以内的变量都是局部变量!!!
    
    class Demo2 {
        public static void main(String[] args) {
            // for 循环条件中定义的循环变量i是一个局部变量
            // 有且只能在for循环以内使用,超出无效
            for (int i = 0; i < 10; i++) {
                
            }
            
            // System.out.println(i);
            // 变量不得重复定义
            // int i = 10;
            // int i = 20;
            
            // System.out.println(i);
            
            for (int i = 0; i < 10; i++) {
                // 变量先定义,后使用,从定义位置开始才可以使用对应变量
                // System.out.println(num);
                
                if (0 == i) {
                    // if大括号以内的num有效范围只能是大括号以内
                    int num = 10;
                }
                
                int num = 10;
            }
        }
    }
    
    2.2 对比
    区别 成员变量 局部变量
    位置 在class大括号以内 除class大括号,其他大括号以内
    内存存储 是随着类对象存储于内存的堆区 存储于内存的栈区
    初始值 成员变量初始值在没有被构造方法赋值的情况下,默认是对应数据类型的"0"值 Java中规定,局部变量未赋值情况下,不得参与其他运算
    作用域 成员变量作用域是受到当前所在类对象作用范围控制 局部变量作用域范围有且只在当前大括号以内,并且是从定义位置开始往后
    生存期 是随着类对象的创建而出现,随着类对象的销毁而终止。JVM的GC 在所处大括号以内,从定义位置开始到大括号结束
    【补充知识点 "0"值】
        所谓零值就是当前变量对应的内存空间中,所有的二进制为都是"0",这就是"0"值。
        "0"值最重要的是对应数据对外效果,不同的数据类型"0"值是不一样的
        
        byte short int ==> 0
        long ==> 0L;
        float ==> 0.0F;
        double ==> 0.0;
        char ==> '\0' 当前编码集中编号为0的字符 ==> nul
        boolean ==> false
        所有的引用数据类型 ==> null
            String 自定义类
    
    【补充知识点 JVM的GC机制】
        JVM虚拟机 GC机制是用于处理Java程序中所使用内存回收功能,该功能可以极大的简化程序员的开发压力。
        内存管理
            是用于管理程序开辟的内存空间,内存空间需要合理使用和回收。内存的使用不单
            单是你自己的程序运行问题,同时会影响到同平台软件的运行。
            如果程序中对于内存只有申请,没有关闭,会导致内存【泄漏】!!!
        
    GC垃圾回收机制是如何运行。
        图书管理员
    
    image.png
    JVM GC机制概述
        1. GC会在单位时间内不间断巡视当前程序使用内存空间情况
        2. 如果发现无主内存【标记】
        3. 下一次单位时间内,发现上一次【标记】内存无主使用,收回当前内存,如果有程序
        使用,撤回标记,不收回内存。
    

    3. 面向对象三大特征

    3.1 封装
    面向对象的封装,只是整个开发思路中封装的一小部分!!!
        方法是用于封装功能代码。
        方法看做是工具 ==> 组合成 工具箱
        工具箱 如果比较复杂 会提供 ==> 说明书
    
    封装建议
        一段功能代码使用了三遍,封装成一个方法
        一堆处理功能类似的方法使用了三遍,封装成一个工具类
        一个工具类使用了三遍,完成对于的完整说明
        说明内容在公司中广为流传,发一个博客,GitHub
    
    3.2 实体类JavaBeans规范封装
    实体类:
        人类,狗类,猫类
        真实存在的数据类型,Java中使用class对于当前事物进行数据封装
    
    权限修饰符
        private
            私有化,私有修饰
            private修饰的成员变量,成员方法和构造方法有且只能当前类内使用。
            private修饰成员变量,可以保证数据操作统一性,和数据操作安全性
            private修饰成员方法,可以保证私密性方法运行,类外无法执行操作
            private修饰构造方法,限制构造方法使用,后期用于【单例模式】
        public
            公开的,所修饰的成员变量,成员方法和构造方法,都是可以直接类外使用。
            
        在JavaBeans规范中,要求成员变量全部【private修饰】
    
    private修饰成员变量类外无法操作,需要提供对应的Setter和Getter方法。 
    
    Setter方法格式
        public void set成员变量名(对于成员变量数据类型参数) {
            赋值语句
        }
        Person ==> String name;
        
        public void setName(String name) {
            this.name = name;
        }
        
    Getter方法格式:
        public 对于成员变量数据类型返回值 get成员变量() {
            return 成员变量;
        }
        Person ==> String name;
        
        public String getName() {
            return name;
        }
        特殊情况:
            如果成员变量数据类型是boolean, 对应get方法
            Person ==> boolean married;
            
            这里要求is开头
            public boolean isMarried() {
                return married;
            }
    
    /**
     * @author Anonymous 2020/7/25 11:50
     */
    public class Cat {
        private String name;
        private String color;
        private int age;
    
        public Cat() {
        }
        
        public Cat(String name, String color, int age) {
            this.name = name;
            this.color = color;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    相关文章

      网友评论

        本文标题:java基础-day08-面向对象2.0

        本文链接:https://www.haomeiwen.com/subject/cxpnyltx.html