Javaoop笔记(全套学习笔记)

一.继承
1.重写方法
1.1 重写方法和被重写方法必须具有相同的方法名
1.2 重写方法和被重写方法必须具有相同的参数列表
1.3 重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类
1.4 重写方法不能缩小被重写方法的访问权限

2.super的作用和使用
2.1 super必须出现在子类(子类的方法和构造方法)中,而不是在其他位置。
2.2 可以访问父类的成员,如父类的属性,方法,构造方法。
2.3 注意访问权限的限制,如无法通过super访问perivate成员。
2.4 super.name; //访问直接父类的name属性
2.5 super.print(); //访问直接父类的print()方法
2.6 super(name) //访问直接父类对应的构造方法,只能出现在构造方法中

3.抽象类和抽象方法
3.1 抽象类和抽象方法都通过abstract关键字来修饰
3.2 抽象类不能实例化。抽象类中可以没有,有一个或多个抽象方法,甚至全部方法都可以是抽象方法
3.3 抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明抽象类。子类必须声明为抽象类,
子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。
3.4 “public void print(){}”不是抽象方法,而是有实现但实现为空的普通方法。
“ public void print();是抽象方法,别忘记最后的分号。
3.5 abstract可以用来修饰类和方法,但不能用来修饰属性和构造方法。

4.抽象类和抽象方法的特点如下。
4.1 抽象类和抽象方法都通过abstract关键字来修饰
4.2 抽象类不能实例化。抽象类中可以没有,有一个或多个抽象方法,甚至全部方法都可以是抽象方法
4.3 抽象方法只有声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有的抽象方法才能实例化,
否则子类还是一个抽象类。

5.final的应用
5.1 用final修饰的类,不能再被继承
5.2 用final修饰的方法不能被子类重写
5.3 用final修饰的变量(包括成员变量和区部变量)将变成常量,只能赋值一次
5.4 final和abstract是功能相反的两个关键字,可以对比记忆
5.5 abstract可以用来修饰类和方法,不能用来修饰属性和构造方法。final可以用来修饰类,方 法和属性
不能用来修饰构造方法。
5.6 使用final修饰引用型变量时,变量的值是固定不变的,而1变量所指向的对象的属性值是可 变的
5.7 abstract不能和private同时修饰一个方法
abstract不能和static同时修饰一个方法
abstract不能和final同时修饰一个方法和类
二.多态
1.什么是多态
1.1 简单来说,多态是具有表现多种形态能力的特征。更专业化的说法:同一个实现接口,使用不同的实例而执行不同的操作。

2.子类转换成父类时的规则
2.1 将一个父类引用指向一个子类,称为向上转换,自动进行类型转换
2.2 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。
2.3 此时通过父类引用变量无法调用子类特有的方法

3.instanceof运算符
3.1 使用instanceof运算符时,对象的类型必须和instanceof的第二个参数所指定的类或接口在继承树上有上下级关系,否则会
出现编译错误。
3.2 instanceof通常和强制类型转换结合使用。

三.接口
1.什么是接口
1.1 接口所有的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见的;如果省略修饰符,则该接口只在当前包可见
1.2 接口中所有方法都是抽象方法。接口中的方法都会自动用public abstract修饰,即接口中只有全局抽象方法
1.3 和抽象类一样,接口也不能实例化,接口中不能有构造方法。
1.4 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
1.5 接口的实现类必须实现接口全部方法,否则必须定义为抽象类。

四.异常
1.什么是异常处理
1.1 异常处理机制就像我们对平时可能会遇到的意外情况,预先想好了一些处理的办法。
1.2 java异常处理是通过五个关键字来实现的:try,catch,finally,throw和throws

五.集合框架
1.java集合框架包含的内容
1.1 集合框架包含三大块内容,对外的接口,接口的实现和对集合运算的算法。
1.1.1 接口:表示集合的抽象数据类型
1.1.2 实现:集合框架中接口的具体实现
1.1.3 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算方法,如查找,排序。
1.2 java集合中的两大类接口:Collection和Map。其中Collection又有两个子接口:List和Set。
所有通常说java集合框架共有三大类接口:List,Set和Map.他们的共同点:都是集合接口.都可以用来存储很多对象。他们分别是如下。
1.2.1 Collection接口存储一组不唯一(允许重复),无序的对象
1.2.2 Set接口继承Collection接口,存储一组唯一(不允许重复),无序的对象
1.2.3 List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象
1.2.4 Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。Map中的key不要求有序,不允许重复。value同样不要求有序,但允许重复
1.2.5 Iterator接口是负责定义访问和遍历元素的接口

2.List接口
2.1 实现List接口的常用类有ArrayList和LinkedList.他们可以容纳所有类型的对象,包括null允许重复,并且都保证元素的存储顺序。
2.2 ArrayList对数组进行了封装,实现了长度可变的数组
2.3 LinkedList采用链表存储方式,优点在于插入,删除元素时效率比较高。
2.4 List接口定义的各种常用方法(见书154页);

3.LinkedList集合类
3.1 在使用LinkedList进行头部和尾部元素添加和删除操作时,出了使用List的add()和remove()方法外,还可以使用LinkedList额外提供的方法来实现操作。

4.HashMap集合类
4.1 Hashtable和HashMap的异同。
Hashtable类出现之前,JDK中存在一个和它同样采用哈希表存储方式.同样实现键值映射的集合类Hashtable。两者实现原理,功能相同,很多情况下可以互用
Hashtable和HashMaop的主要区别如下。
Hashtable继承自Dictionary类,而HashMap实现了Map接口
Hashtable是线程安全的。HashMap重速度,轻安全,是线程非安全的,所有当运行到多线程环境中时,需要程序员自己管理线程同步问题。
Hashtable不允许null值(key和value都不允许),HashMap允许null值(key和value都允许)。
开发过程中,最好使用新版本的HashMap。
5.迭代器Iterator
5.1 Collection接口的iterator()方法返回一个Irerator,然后通过Iterator接口的两个方法
5.2 boolean hasNext():判断是否存在另一个可访问的元素
5.3 Object next(): 返回要访问的下一个元素。

六.多线程
1.什么是多线程
1.1 如果在一个进程里中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”。
1.2 多个线程交替占用CPU资源,而非真正的并行执行
2.多线程的好处
2.1 充分利用CPU的资源
2.2 简化编程模型
2.3 带来良好的用户体验
3.Thread类及其常用方法
3.1 java提供了java.lang.Thread类支持多线程编程
3.1 Thread类常用的方法(见书175页)
4.主线程
4.1 main()方法即为主线程入口
4.2 产生其他子线程的线程
4.3 必须最后完成执行,因为他执行各种关闭动作。
5.两种方式创建线程
5.1 声明一个继承了Thread类的子类,在此子类中,实现Thread类的run()方法。
5.1.1 此线程类需要继承Thread类并重写Thread类的run()方法。
5.1.2 Thread类的run()方法是线程要执行操作任务的方法,所以线程要执行的操作代码都需要写在run()方法中。
5.1.3 Thread类的run()方法是通过start()方法启动线程后调用。
5.1.5 注意:已启动的线程对象不能再次调用start()方法,否则会抛出IllegalThreadStateException异常
5.2 声明一个实现Runnable接口的类,然后实run()方法。
5.3 两种创建线程的方式的特点和应用领域
5.3.1 继承Thread类的方式:编写简单,可以直接操作线程,适用于单继承的情况
5.3.2 实现Runnable接口的方式: 可以实现多个线程之间资源共享,避免单继承的局限性
5.4 线程对像调用start()方法和调用run()方法的区别
5.4.1 run():只有主线程一条执行路径
5.4.2 start():多条执行路径,主线程和子线程并行交替执行。
6.线程的状态
6.1 创建状态
6.1.1 在程序中用构造方法创建了一个线程对象后,新的线程对象就处于创建状态。
6.2 就绪状态
6.2.1 线程创建之后,就可以通过调用start()方法启动线程,即进入就绪状态。
6.3 运行状态
6.3.1 当就绪状态的线程获得CPU资源时,即可转入运行状态,执行run()方法。
6.4 阻塞状态
6.4.1 一个正在运行的线程因某种原因不继续运行时,进入阻塞状态
6.4.2 可能使线程暂停执行的条件如下:
6.4.2.1 由于线程优先级比较低,因此它不能获得CPU资源。
6.4.2.2 使用sleep()方法使线程休眠。
6.4.2.3 通过调用wait()方法,使线程等待。
6.4.2.4 通过调用yield()方法,线程显示出让CPU控制权。
6.4.2.5 线程由于等待一个文件,I/O事件阻塞。
6.5 死亡状态。
6.5.1 一个线程的run()方法运行完毕,线程测进入死亡状态。

七.File I/O
1.使用File类操作文件或目录属性
1.1 File类的九大方法(见书210页)
2.IO流
2.1 按照流的流向进行划分,可以分为输入流和输出流,
2.1.1 输入流:只能从中读取数据,而不能向其中写入数据(OutputStream和Writer作为基类)。
2.1.2 输出流:只能向其中写入数据,而不能从中读取数据(InputStream和Reader作为基类)。
2.2 按照所操作的数据单元的不同,流又可划分成字节流和字符流
2.2.1 字节流操作的最小数据单元为8位的字节,而字符流操作的最小数据单元是16位的字符
2.2.2 字节流和字符流的区分非常简单,字节流建议用于二进制数据,而字符流用于文本,他们的用法几乎是完全一样的。
2.2.3 按照流的流向,我们还可以对字节流和字符流继续进行划分,分出字节输入流(InputStream基类),字节输出流(OutputStream基类),字符输入流(Reader基类),字符输出流(Writer基类)

public static void main(String[] args) {
//反射是根据全路径,得到对应的对象
final String url = “jdbc:mysql://localhost:3306/studentdb?characterEncoding=UTF-8”;
final String user =“nca”;
final String pwd =“root”;
try {
Class.forName(“com.mysql.jdbc.Driver”);
Connection connection = DriverManager.getConnection(url, user, pwd);
System.out.println(connection);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱写程序的白羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值