[Java] Java record
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java] Java record相关的知识,希望对你有一定的参考价值。
2-1 java中的封装 概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法类实现对隐藏信息的操作和访问。 好处: 1. 只能通过规定的方法访问数据 2. 隐藏类的实例细节,方便修改和实现 封装的步骤: 1. 修改属性的可见性 设置为private 2. 创建getter/setter 方法 用于属性的读写 3. 在getter/setter方法中加入属性控制语句 对属性值得合法性进行判断 2-2 使用包管理类 2-3 java中的访问修饰符 访问修饰符——可以修饰属性和方法的访问范围 访问修饰符 本类 同包 子类 其他 private √ 默认 √ √ protected √ √ √ public √ √ √ √ 2-4 java中的this关键字 1. this关键字代表当前对象 this.属性 操作当前对象的属性 this.方法 操作当前对象的方法 2. 封装对象的属性的时候,经常使用this关键字 2-5 什么是 Java 中的内部类 问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!! 答:内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便 问:内部类有几种呢? 答:内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 匿名内部类 2-6 java中的成员内部类 com.imooc2.Demo05 成员内部类的使用方法: 1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置, Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等 2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据, 而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a 3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象, 而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( ); 4、 编译上面的程序后,会发现产生了两个 .class 文件 其中,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class 另外,友情提示哦: 1、 外部类是不能直接使用内部类的成员和方法滴 可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。 2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法, 如果要访问外部类的成员变量,可以使用 this 关键字。 2-7 Java中的静态内部类 com.imooc2.Demo06 静态内部类是 static 修饰的内部类,这种内部类的特点是: 1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员; 如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员 3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类(); 2-8 Java中的方法内部类 com.imooc2.Demo07 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。 一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。 3-1 Java 中的继承 关键字 : extends 继承的初始化顺序 1. 初始化父类,再初始化子类 2. 先执行初始化对象中属性,再执行构造方法中的初始化 父类对象 -> 父类属性初始化 -> 父类构造方法 -> 子类对象 -> 子类属性初始化 -> 子类构造方法 3-5 java 中的final使用 使用final关键字做标识 有“最终的”含义,final可以修饰类,方法,属性和变量 final修饰类,则该类不允许被继承 final修饰方法,则该方法不允许被覆盖(重写) final修饰属性 则该类的属性不会进行隐式的初始化; 或在构造方法中赋值(但只能选其一) final 修饰变量,则该变量的值只能赋一次值,即成为常量 3-6 java 中的super关键字 在对象的内部使用,可以代表父类对象。 1. 访问父类的属性 super.age 2. 访问父类的方法 super.eat() 3. super的应用 子类的构造的过程中必须调用其父类的构造方法, 当我们创建子类对象的时候,其实会自动执行,创建父类对象,并初始化父类构造方法, 此时就已经隐式的使用了super关键字 当我们需要显式的使用super关键字,必须将super()父类构造方法放入子类构造方法的第一行。 constructor call must be the first statement in a constructor 如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。 3-7 java 中的object 类 object 类是所有子类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类。 object 类中的方法,适合所有的子类。 常用object类中的方法: 1. toString() : 在Object类里面定义toString()方法的时候默认返回对象的哈希code码 (对象地址字符串); 可以重写toString()方法表示出对象的属性 @override public void toString() { return "Dog[age="+age+"]"; } 2. equals(): 比较的时对象的引用是否指向同一块内存地址; 比如:Dog dog = new Dog(); 此时创建的dog 是创建的dog引用指向内存中的一个地址, 而通过调用dog对象的在内存中的地址,间接的使用对象 但是一般情况下,比较两个对象时,是比较两个对象的值是否相同,所以需要重写此equals方法。 @override public boolean equals(Object obj) { if(this==obj) return true; if(obj==null) return false; if(getClass()!=obj.getClass()) return false; Dog other=(Dog)obj; if(age!=other.age) return false; return true; } 4-1 java中的多态 1. 引用的多态 父类的引用可以指向本类的对象:Animal obj1 =new Animal(); 父类的引用可以指向子类的对象:Animal obj2 =new Dog(); 2. 方法的多态 创建本类对象时,调用方法为本类的方法 创建子类对象时,调用方法为子类重写的方法或者继承的方法 4-2 java 中的引用类型转换 1. 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换 不存在风险,也叫自动类型转换 2. 向下类型转换(强制类型转换),是大类型到小类型的转换 存在风险,当小类型装不下大类型时,可能出现数据溢出 3. instanceof 运算符 ,来解决引用对象的类型,避免类型转换的安全性问题。 判断一个引用是否是某个类型或者某个类型的子类型,返回boolean值 4-3 java 中的抽象类 抽象类前使用abstract关键字修饰,则该类为抽象类 应用场景: 1. 在某些情况,某个父类只是知道某个子类包含怎样的方法,但是无法准确知道这些子类如何实现这些方法。 也就是说抽象类是约束子类必须有哪些方法,而不关心子类如何具体如何实现的 2. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类做为子类的模板,从而避免子类设计的随意性。 作用: 限制规定子类必须实现某些方法,但不关心实现的细节,但约束子类有哪些特征。 使用规则: 1. abstract 定义抽象类 2. abstract 定义抽象方法,只有声明,不需要实现 3. 包含抽象方法的类是抽象类 4. 抽象类可以包含普通的方法,也可以没有抽象方法 5. 抽象类不能直接创建,可以定义引用变量 4-4 java 中的接口 接口可以理解为一种特殊的类,由全局常量和公共抽象方法所组成。 1. 接口概念 类是一种具体的实现体,而几口定义了某一批类所需要的遵守的规范, 接口不关心这些类的内部数据,也不关心这些类里的方法的实现细节,它只规定这些类里必须提供某些方法。 2. 接口定义 和类定义不同,定义接口不再使用class关键字,而是使用 interface关键字。 3. 定义的基本语法: [修饰符]以上是关于[Java] Java record的主要内容,如果未能解决你的问题,请参考以下文章