02_面向对象与常用类
2022-10-06 17:16:07 11 举报
AI智能生成
笔记
作者其他创作
大纲/内容
类、封装和构造
类和对象
类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物。
对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性 和行为。
public class ClassName { //成员变量 //成员方法 }
封装
1. 使用 private 关键字来修饰成员变量。
2. 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
构造方法
修饰符 构造方法名(参数列表){ // 方法体 }
1. 如果你不提供构造方法,系统会给出无参数构造方法。
2. 如果你提供了构造方法,系统将不再提供无参数构造方法
3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。
常用类
API
API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给 我们使用的类的说明文档。
1. 打开帮助文档。2. 点击显示,找到索引,看到输入框。 3. 你要找谁?在输入框里输入,然后回车。 4. 看包。java.lang下的类不需要导包,其他需要。 5. 看类的解释和说明。 6. 学习构造方法。
引用类型使用
import 包名.类名;
数据类型 变量名 = new 数据类型(参数列表); 变量名.方法名();
Scanner类
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
Random类
Random r = new Random(); int i = r.nextInt();
public int nextInt(int n) :返回一个伪随机数,范围在 0 (包括)和 指定值 n (不包括)之间的 int 值。
获取1-n之间的随机数,包含n:int number = r.nextInt(n) + 1;
String类
1. 字符串不变:字符串的值在创建后不能被更改
内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
内存中只有一个"abc"对象被创建,同时被s1和s2共享
String底层是靠字符数组实现的。相当于: char data[] = {'a', 'b', 'c'};
无参构造,通过字符数组构造,通过字节数组构造
常用方法
equals判断功能的方法
s1.equals(s2); 比较字符串的内容是否相同
s1.equalsIgnoreCase(s2); 比较字符串的内容是否相同,忽略大小写
获取功能的方法
s.length(); 获取字符串的长度,其实也就是字符个数
s.concat(" world"); 将将指定的字符串连接到该字符串的末尾.
s.charAt(0); 获取指定索引处的字符
s.indexOf("l"); 获取str在字符串对象中第一次出现的索引,没有返回‐1
s.substring(5); 从start开始截取字符串到字符串结尾
s.substring(3,8); 从start到end截取字符串。含start,不含end
转换功能的方法
s.toCharArray(); 把字符串转换为字符数组
s.getBytes(); 把字符串转换为字节数组
str.replace("it", "IT"); 替换字母it为大写IT
分割功能的方法
s.split("|"); 将此字符串按照给定的regex(规则)拆分为字符串数组。
static关键字
它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的。也就是说,既然属于类,就可以不靠创建对象来调用了。
当 static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改 该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。
存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。
静态代码块
定义在成员位置,使用static修饰的代码块{ }。
位置:类中方法外。 执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。 格式:
Arrays类
System.out.println(arr); 打印数组,输出地址值
Arrays.toString(arr); 数组内容转为字符串
Arrays.sort(arr); 升序排序
扩容: array= Arrays.copyOf(array,array.length+1);
Math类
Math.abs(‐5); d1的值为5,返回 double 值的绝对值。
Math.ceil(‐3.3); d2的值为 ‐3.0,返回大于等于参数的最小的整数。
Math.floor(3.3); d1的值为3.0,返回小于等于参数最大的整数。
Math.round(5.5); d1的值为6.0,返回最接近参数的 long。(相当于四舍五入方法)
继承、构造方法、super,抽象类
继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。
1. 提高代码的复用性。 2. 类与类之间产生了关系,是多态的前提
通过 extends 关键字,可以声明一个子类继承另外一个父类
方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效 果,也称为重写或者复写。声明不变,重新实现。
构造方法
1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的
2. 构造方法的作用是初始化成员变量的。所以子类执行构造方法过程中,必须先执行父类的构造方法。子类的构 造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。
super :代表父类的存储空间标识(可以理解为父亲的引用)
抽象类abstract
修饰符 abstract 返回值类型 方法名 (参数列表);
如果一个类包含抽象方法,那么该类必须是抽象类。
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。
抽象类无法被实例化
多态、接口、权限、内部类
接口
接口概念
接口,是Java语言中一种引用类型,是方法的集合
接口的内部主要就是封装了方法
接口的定义使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并 不是类,而是另外一种引用数据类型。
一个实现接口的类(可以看做 是接口的子类),需要实现接口中所有的抽象方法。创建该类对象,就可以调用方法了,否则它必须是一个抽象 类。
如果子类是抽象方法,继承接口,可以不用实现接口中的抽象方法
一个类可以继承多个接口,使用关键字implements
默认方法和静态方法
默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写
public default void method() {}
1.继承,什么都不用写,直接调用
2.子类中重写,直接调用
静态方法:使用 static 修饰,供接口直接调用。
public static void method2() {}
静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用
无法重写静态方法,无法继承方法,也无法调用
接口默认含有抽象方法
属性默认抽象方法是:public static abstract 类型 属性名
方法默认抽象方法是:public abstract 类型 方法名();
接口默认抽象方法:public abstract interface fu {}
含有私有方法和私有静态方法
私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。
private static void method() {}
私有方法:只有默认方法可以调用。
私有静态方法:默认方法和静态方法可以调用
接口的多实现
接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果抽象方法有重名的,只需要重写一次。
接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法。
优先级的问题:当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类就近选择执 行父类的成员方法。
接口的多继承
一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends 关键字,子接口继 承父接口的方法。如果父接口中的默认方法有重名的,那么子接口需要重写一次。
其他特点
接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
接口中,没有构造方法,不能创建对象。
接口中,没有静态代码块。
多态
多态的概念
多态体现的格式:父类类型 变量名 = new 子类对象;
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写 后方法。
多态的好处:父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展 性与便利。
引用类型转换
向上转型
父类类型 变量名 = new 子类类型();
多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。 当父类引用指向一个子类对象时,便是向上转型
向下转型
子类类型 变量名 = (子类类型) 父类变量名;
父类类型向子类类型向下转换的过程,这个过程是强制的。
一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。
为什么要转型
当使用多态方式调用方法时,父类中没有子类拥有的方法,无法进行调用,所以就必须向下转型
转型的异常
不是继承关系的子父类无法进行转换
收藏
收藏
0 条评论
下一页