一、继承继承如何实现 extends关键字。继承的意思 例:class 子类 extends 父类 继承的好处继承的弊端继承中的成员变量访问特点访问原则 super关键字继承中构造方法的访问特点继承中成员方法的访问特点就近原则 如果子类有成员方法,优先使用子类的成员方法。如果子类没有 去父类中查找成员方法,如果有就使用。如果没有,就报错! 如果就想在子类中去调用父类的成员方法,使用super.父类的成员方法
方法重写的注意事项java中继承的特点java中只支持单继承。不支持多继承 但是可以多层继承
本类 相同包(子父类或无关类) 不同包(子父类) 不同包(无关类) 1.public Y Y Y Y 2.protected Y Y Y 3.默认 Y Y 4.private Y final关键字static关键字静态特点 静态成员访问特点 使用场景 当一个成员需要被所有对象所共享使用时,就可以将其定义为静态的! 动名词法名词是类,动词是方法; 二、多态什么是多态 同一个对象,在不同时刻表现出来的不同形态 多态的前提要有继承或实现关系 要有方法的重写 要有父类引用指向子类对象
成员访问特点成员变量 编译看父类,运行看父类 成员方法 编译看父类,运行看子类
多态好处 提高程序的扩展性。 弊端 不能使用子类的特有成员 多态中的转型三、抽象类抽象类的概述 当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类! 抽象类的特点抽象类和抽象方法必须使用 abstract 关键字修饰 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类 抽象类不能实例化 抽象类的子类 要么重写抽象类中的所有抽象方法 要么是抽象类 抽象类的成员特点四、接口接口的概述 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。 Java中的接口更多的体现在对行为的抽象! 接口的特点接口用关键字interface修饰 类实现接口用implements表示 接口不能实例化 接口实例化参照多态的方式,通过实现类对象实例化,这叫接口多态。 多态的形式:具体类多态,抽象类多态,接口多态。 接口的子类 要么重写接口中的所有抽象方法 要么子类也是抽象类 接口的成员特点成员特点 类和接口的关系抽象类和接口的区别成员区别
关系区别
类与类 继承,单继承 类与接口 实现,可以单实现,也可以多实现 接口与接口 继承,单继承,多继承
设计理念区别
抽象类 对类抽象,包括属性、行为 接口 对行为抽象,主要是行为
五、内部类类名作为形参和返回值类名作为方法的形参 方法的形参是类名,其实需要的是该类的对象 实际传递的是该对象的【地址值】 类名作为方法的返回值 方法的返回值是类名,其实返回的是该类的对象 实际传递的,也是该对象的【地址值】
抽象类作为形参和返回值接口名作为形参和返回值内部类概念/*
格式:
class 外部类名{
修饰符 class 内部类名{
}
}
*/
class Outer {
public class Inner {
}
}内部类的访问特点内部类可以直接访问外部类的成员,包括私有 外部类要访问内部类的成员,必须创建对象
成员内部类成员内部类的定义位置
外界创建成员内部类格式
成员内部类的推荐使用方案
局部内部类匿名内部类匿名内部类的前提
匿名内部类的格式
格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }
匿名内部类的本质
匿名内部类的细节
匿名内部类直接调用方法
interface Inter{
void method();
}
class Test{
public static void main(String[] args){
new Inter(){
@Override
public void method(){
System.out.println("我是匿名内部类");
}
}.method(); // 直接调用方法
}
}匿名内部类在开发中的使用匿名内部类在开发中的使用 六、常用APIMath1、Math类概述
2、Math中方法的调用方式
3、Math类的常用方法 [td]方法名 方法名 | 说明 | public static int abs(int a) | 返回参数的绝对值 | public static double ceil(double a) | 返回大于或等于参数的最小double值,等于一个整数 | public static double floor(double a) | 返回小于或等于参数的最大double值,等于一个整数 | public static int round(float a) | 按照四舍五入返回最接近参数的int | public static int max(int a,int b) | 返回两个int值中的较大值 | public static int min(int a,int b) | 返回两个int值中的较小值 | public static double pow (double a,double b) | 返回a的b次幂的值 | public static double random() | 返回值为double的正值,[0.0,1.0) |
System[td]方法名 | 说明 | public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 | public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) | Object类的toString方法Object类概述
查看方法源码的方式
重写toString方法的方式
toString方法的作用:
Object类的equals方法equals方法的作用
重写equals方法的场景
重写equals方法的方式
冒泡排序原理冒泡排序概述
如果有n个数据进行排序,总共需要比较n-1次 每一次比较完毕,下一次的比较就会少一个数据参与
ArraysArrays的常用方法 [td]方法名 | 说明 | public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 | public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
工具类设计思想 1、构造方法用 private 修饰 2、成员用 public static 修饰
七、包装类基本类型包装类Integer类int和String类型的相互转换
public class IntegerDemo {
public static void main(String[] args) {
//int --- String
int number = 100;
//方式1
String s1 = number + "";
System.out.println(s1);
//方式2
//public static String valueOf(int i)
String s2 = String.valueOf(number);
System.out.println(s2);
System.out.println("--------");
}
}String转换为int
示例代码
public class IntegerDemo {
public static void main(String[] args) {
//String --- int
String s = "100";
//方式1:String --- Integer --- int
Integer i = Integer.valueOf(s);
//public int intValue()
int x = i.intValue();
System.out.println(x);
//方式2
//public static int parseInt(String s)
int y = Integer.parseInt(s);
System.out.println(y);
}
}
自动拆箱和自动装箱自动装箱 把基本数据类型转换为对应的包装类类型 自动拆箱 把包装类类型转换为对应的基本数据类型 开发过程中,引用数据类型均要判断是否非null 示例代码
Integer i = 100; // 自动装箱
i += 200; // i = i + 200; i + 200 自动拆箱;i = i + 200; 是自动装箱
八、时间日期类Date类Date类常用方法常用方法 [td]方法名 | 说明 | public long getTime() | 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 | public void setTime(long time) | 设置时间,给的是毫秒值 |
SimpleDateFormat类
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//格式化:从 Date 到 String
Date d = new Date();
// SimpleDateFormat sdf = new SimpleDateFormat();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
System.out.println("--------");
//从 String 到 Date
String ss = "2048-08-09 11:11:11";
//ParseException
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);
}
}Calendar类Calendar类概述 Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法 Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。 该方法返回一个Calendar 对象。 其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance(); Calendar类常用方法 [td]方法名 | 说明 | public int get(int field) | 返回给定日历字段的值 | public abstract void add(int field, int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 | public final void set(int year,int month,int date) | 设置当前日历的年月日 |
异常
概念:不正常的现象 异常的体系结构
Throwable
Error:不可处理的异常 Exception:可处理的异常
RuntimeException: 运行时异常 非RuntimeException:编译时异常
JVM默认处理异常的方式
try:异常监视块 catch():捕获块 执行流程
Throwable成员方法
getMessage() 异常字符串 toString()简短异常消息 printStackTrace():详细异常消息
运行时异常和编译时异常
throws 抛出异常
自定义异常
步骤
自定义一个类继承自Exception 构造方法-> super(message) throw
自定义异常自定义异常类
public class ScoreException extends Exception {
public ScoreException() {}
public ScoreException(String message) {
super(message);
}
}老师类
public class Teacher {
public void checkScore(int score) throws ScoreException {
if(score<0 || score>100) {
// throw new ScoreException();
throw new ScoreException("你给的分数有误,分数应该在0-100之间");
} else {
System.out.println("成绩正常");
}
}
}测试类
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入分数:");
int score = sc.nextInt();
Teacher t = new Teacher();
try {
t.checkScore(score);
} catch (ScoreException e) {
e.printStackTrace();
}
}
}
九、集合Collection集合概念及体系结构 概念:可变长度数据容器 体系结构:
单列:Collection
双列:Map HashMap
Collection的概述和基本使用 Collection集合的常用方法 Collection集合遍历 如何去获取迭代器:调取iterator() 判断是否还有元素:hasNext() 取出对象:next()
Listlist集合的概述和特点 list集合特有方法
读取:get(i)返回指定索引处的元素 添加:add(i,object)在此集合中的指定位置插入指定的元素 指定位置替换数据:set(i,object)修改指定索引处的元素,返回被修改的元素 删除:remove(i)删除指定索引处的元素,返回被删除的元素
集合并发问题及ListIterator用法
增强for循环
数组和链表的区别
LinkedList LinkedList特有方法 SetSet集合的特点
存取无序 没有索引,只能通过增强for或迭代器遍历 不能重复的元素
Hash值的概念
HashSet集合的特点
无序(没索引)
由于是Set集合,不能重复的元素 低层实现是hash表
LinkedHashSet集合的特点
不能重复的元素 由链表保证元素有序,元素的存储和取出顺序是一致的 由哈希表保证元素唯一,也就是说没有重复的元素 能够按照存储的顺序读出数据
TreeSet集合的特点
泛型的概念及好处
概念:参数化类型 类型检查,编译 把运行时期的问题提前到了编译期间 避免了强制类型转换
泛型举例
泛型类
public class Generic<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
泛型方法
public class Generic {
public <T> void show(T t) {
System.out.println(t);
}
}
泛型接口
public interface Generic<T> {
void show(T t);
}
public class GenericImpl<T> implements Generic<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
类型通配符
//类型通配符:<?>
List<?> list1 = new ArrayList<Object>();
List<?> list2 = new ArrayList<Number>();
List<?> list3 = new ArrayList<Integer>();
System.out.println("--------");
//类型通配符上限:<? extends 类型>
// List<? extends Number> list4 = new ArrayList<Object>();
List<? extends Number> list5 = new ArrayList<Number>();
List<? extends Number> list6 = new ArrayList<Integer>();
System.out.println("--------");
//类型通配符下限:<? super 类型>
List<? super Number> list7 = new ArrayList<Object>();
List<? super Number> list8 = new ArrayList<Number>();
list8.add(new Integer(5));
```可变参数 可变参数
可变参数举例
Aarrays.asList()返回由指定数组支持的固定大小的列表,返回的集合不能做增删操作,可以做修改操作 List.of()返回包含任意数量元素的不可变列表,返回的集合不能做增删改操作 Set.of()返回一个包含任意数量元素的不可变集合,在给元素的时候,不能给重复的元素
Mapmap集合的概述和特点
健值对方式存储数据 一个键对应一个值 健不允许重复,值可以重复 无序
map集合常用方法
map结合读取数据方法
Collections常用方法
十、IO流File类IO流流概述
IO:输入/输出(Input/Output)输入流 输出流 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输 IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载 工作方式:字节流 字符流
IO流的使用场景
字节流写数据
字节流写数据的两个小问题 换行
字节流读取数据
|