美文网首页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