面向对象
面向对象编程的本质是:以类的方式组织代码,以对象的形式封装数据
三大特性: 封装,继承,多态
任何具体的事物都可以是一个对象
类中只有方法和属性
方法的重载
方法的重载是指在一个类中定义多个同名的方法,但是要求参数类型或者参数个数,位置不能相同。
调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法
- 方法名相同
- 方法的参数类型,参数个不一样
- 方法的返回类型可以不相同
- 方法的修饰符可以不相同
- main 方法也可以被重载
String
字符串相比较 (字符串之间不能用== 比较)
- == : 比的是地址
- .equals 比的是内容
常用方法:
public int length(); //得到长度
public char charAt(int index);//根据下标得到字符
public String trim(); //去掉前后空格
public int compareTo(String anotherString); //比较字符串大小
public boolean endsWith(String suffix);
System.out.println(str.endsWith("ld")); //判断字符串是否以一个字符串结尾
System.out.println(str.startsWith("He ")); //判断字符串是否以一个字符串开始
public int indexOf(String str);
System.out.println(str.indexOf("ll")); // 判断(得到)字符串首次出现的位置的下标
public String substring(int beginIndex, int endIndex);
System.out.println(str.substring(11)); // 从字符串下标11的位置一直截取到最后
public String[] split(String regex); // 以某个字符串分割整个字符串,并存入字符串数组中
public replace(char oldChar, char newChar); // 字符串替换
public replaceAll(String regex, String replacement); //
public boolean equal(Object obj); // 比较字符串是否相等
构造器
- **new 的本质就是调用构造方法 **
- super : 调用父类构造器,必须要在子类第一行(不写的情况下默认就是第一行)
- super 必须只能出现在子类的方法或者构造方法中
- super 和 this 不能同时调用构造方法
- this :本身调用的这个对象 —— 没有继承也可以使用
- super :代表父类对象的引用 —— 只能在继承条件才可以使用
构造方法: this() ; 本类的构造 super() ;父类的构造
静态—static
特点:
-
数据共享
-
属于类的,但不属于对象
-
优先于对象产生的,且只会执行一次
-
由于创建对象的过程是在静态类容加载完成之后,在静态方法和静态块里不能使用this
-
静态的属性使用类名去访问。
-
import static java.lang.Math.random;
静态导入包
方法重写
必须要有继承关系,子类重写父类的方法
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大,不能缩小
-
抛出的异常:范围可以缩小,不能扩大
不能被重写的方法:
- static 方法 ,属于类,不属于实例
- final 常量 private 方法
抽象类
定义: abstract class 类名
- 抽象类中可以有抽象方法,抽象方法必须写在抽象类中,抽象方法没有方法体
- 抽象类中可以写普通方法
- 抽象类不能 new 对象,只能子类去实现他,约束。
- 意义,提高开发效率
多态
- 必须要有继承
- 方法必须要重写
- 父类引用指向子类
-
对象执行哪些方法,主要是看对象左边的类型
-
引用数据类型之间的转换只存在于父子类型之间转换
Person p1 = new Student(); //向上转型 Student p2 = (Student)p1; //向下转型
接口
- 接口只有规范,没有具体实现
- 接口中的方法都是抽象方法
void 方法名(); //前面默认都是public abstract
- 接口中的属性都是静态常量
- 实现接口必须要重写接口中的方法
内部类
- 一个Java类中可以有多个class类,但是只有一个public class
-
成员内部类
public class Outer { //外部属性 private int id = 10; //外部方法 public void out() { System.out.println("这是外部类方法!"); } //内部类 public class Inner{ //内部方法 public void in() { System.out.println("这是内部方法!"); } //获得外部类的私有属性 public void getId() { System.out.println(id); } } }
内部类new 对象 :
Outer.Inner inner = new Outer().new Inner();
-
静态内部类
-
局部内部类
- 写在方法里面的类
-
匿名内部类
异常处理
- 检查性异常: 最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
Error: Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
//快捷键 ctrl + Alt + T
try{
//try监控区域,可能存在异常的代码
}catch(Exception e){
//捕获异常
//当有异常发生时,执行该区域的代码
}finally{
//不论前面是否发生异常,这里面的代码都会执行
}
// 捕获多个异常时,范围大的放在后面。
自定义异常类: 必须要继承Exception类