学习java的收获
1. 抽象方法子类添加快捷键:Ctrl+1
2.非静态内部类
语法: new 外部类().new 内部类()
eg: Hero hero = new Hero();
HeroScore score = hero.new HeroScore();
3.默认方法
default加在接口中 可以在连接该接口的子类中加入default方法
通过这种手段,就能够很好的扩展新的类,并且做到不影响原来的类
4.父类构造方法在子类构造方法之前进行
5.super
若父类提供两个构造方法,一个有参,一个无参
public Hero(){
System.out.println("Hero的无参的构造方法 ");}
public Hero(String name){
System.out.println("Hero的有一个参数的构造方法 ");
this.name = name;
}
子类实例化时, 默认掉用父类无参构造方法(因为可能父类没有提供构造方法)
若此时需要调用父类带参构造方法
用super(name);
值得注意的是,super是用来调用指定构造方法,而非有参
若super(); 则调用无参,即可认为子类构造方法中,本身就带有super();
eg:super(1,2) super(1)
且括号内数做其父类的参数
6.instanceof
7.
Math.random() 取0-1
Math.round() 取四舍五入
8.
//%s表示字符串,%d表示数字,%n表示换行
9.
startsWith //以...开始
endsWith //以...结束
//StringBuffer类 使得到 可变长的字符串
append追加
delete 删除
insert 插入
reverse 反转
10.
如果Hello类中已经有了一个有参数的构造方法,这时再使用 Hello hello = new Hello();来创建对象的时候就会出错,这就是为什么书上要强调写了有参数的构造方法就最好加一个无参数的构造方法.
11.System.arraycopy(src, srcPos, dest, destPos, pos);
src:要复制的数组(源数组)
srcPos:复制源数组的起始位置
dest:目标数组
destPos:目标数组的下标位置
length:要复制的长度
12.String.valueOf 将其转化为字符串
String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
13.异常分三类
总体上异常分三类:
- 错误
- 运行时异常
- 可查异常
Java异常机制用到的几个关键字:try、catch、finally、throw、throws
try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
catch – 用于捕获异常。catch用来捕获try语句块中发生的异常。
finally – finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
throw – 用于抛出异常。
throws – 用在方法签名中,用于声明该方法可能抛出的异常。
14.
异常处理三种方式:
1,throws 交给别人处理
public static void readFile(String fileName) throws IOException
{
if(!fileName.equals("c:\\a.txt")) {
throw new FileNotFoundException("传递文件失败");
}
}
2.try…catch (在catch中加入return可结束程序)
try中抛出什么异常对象,catch就定义什么异常变量
Objects.requireNonNull(obj,“传递对象为null”);
15.打印异常
getMessage() 一行
toString() 打印异常名
printStackTrace() 打印详细
16.finally
1,finally不能单独使用, 必须和try一起
2,一般用于资源回收
3,如果finally中有return语句, 会永远返回return语句中的内容
17.多个异常
一个try可多个catch:
catch中定义的异常变量,如果有子父类关系,那么子类异常变量必须写在上面;
这就好比你用两个盆子接水,大盆子在上,小盆子在下,那小盆子自然就一滴水也接不到。
18.父类异常啥样,子类异常就啥样
19. 自定义异常类(java提供的异常类不够我们使用)
1.格式:public class xxxException extends Exception/RuntimeException
需添加一个无参构造方法
需添加一个带异常信息的构造方法(此方法内部调用父类带异常信息的构造方法,让父类来处理)
2.必须继承Exception/RuntimeException
1.继承Exception,那么自定义异常为编译期异常,若方法内部抛出该异常,需要throws或try…catch
2.继承RuntimeException,为运行期异常,无需处理(即不用throw),交给虚拟机(即中断处理)
20.并发与并行
1.并发:两个或多个事件在同一时间段进行(交替执行)
2.并行:两个或多个事件同时发生
21.进程与线程
1.进程:(进入到内存中的程序)
启动一个LOL.exe就叫一个进程。接着又启动一个DOTA.exe,这叫两个进程。
2.线程:线程是进程的一个执行单元,负责程序的执行(多个线程进行互不影响)
线程是在进程内部同时做的事情,比如在LOL里,有很多事情要同时做,比如"盖伦” 击杀“提莫”,同时“赏金猎人”又在击杀“盲僧”,这就是由多线程来实现的。
22.创建多线程程序(必须继承Thread)
方式一:
1.创建一个Thread子类
2.在Thread子类中重写Thread类中的run方法,设置线程作用
3.创建Thread类的子类对象
4.调用Thread类中的start方法,开启新的线程,执行run方法
void start()使该线程开始执行(开辟新的栈空间)
结果是两个线程同时运行:当前线程(从调用返回到start方法)和另一个线程(执行其run方法)。
不止一次启动线程是不合法的。 特别地,一旦线程完成执行就可能不会重新启动。
23.链式编程(获取线程名称)
run
start
setName
getName
currentThread
System.out.println(Thread.currentThread().getName());
24.创建线程方式二
Runnable接口应由任何类实现,其实例将由线程执行。 该类必须定义一个无参数的方法,称为run 。
- 定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体是为该线程设置任务。
- 创建Runnable接口实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
- 调用线程对象的start()方法来启动线程。
eg.
public class MyThread implements Runnable
MyThread mt = new MyThread();
Thread th = new Thread(mt);
th.start();
25.实现Runnable接口比继承Thread类所具有的优势:
- 适合多个相同的程序代码的线程去共享同一个资源。
- 可以避免java中的单继承的局限性。
- 增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立。
- 线程池只能放入实现Runable或Callable类线程,不能直接放入继承Thread的类。
26.匿名类
new Thread().start();//之前的方法
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0; i<10; i++)
System.out.println(Thread.currentThread().getName()+"-->"+"aa");
}
}.start();
27.Collection — List接口 与 Set接口
Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.Set。
List的特点是元素有序、元素可重复。
Set的特点是元素无序,而且不可重复。
List接口的主要实现类有java.util.ArrayList和java.util.LinkedList,
Set接口的主要实现类有java.util.HashSet和java.util.TreeSet。
几个方法:
1.Collection<String> coll = new ArrayList<String>();
2.public boolean add()
3.public boolean remove()
3.public boolean contains()
4.public boolean isEmpty()
5.public int size()
6.public Object[] toArray() 将集合变为数组
7.public void clear() 清空元素,但集合还在 跟创建时一样
28.三种遍历
前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,
29.迭代器使用步骤
1.使用集合中的方法(iterator)获取迭代器的实现类对象,使用iterator接口接收(多态)
2.使用Iterator接口中的方法hasNext判断还有没有下一个元素(boolean)
3.使用Iterator接口中的方法next取出下一个元素
30.含有泛型的接口
public class t<I> implements aInterface<I>
31.泛型的通配符<?>只能用在方法的参数传递中 而不能用在语句定义中
(因为泛型没有继承概念)在方法中写Object,会都报错
public static void printArray(ArrayList<?> list) {
Iterator<?> it = list.iterator();
while(it.hasNext()) {
Object o = it.next();//此时用Object 那么都可输出
System.out.println(o);
}
}
上一篇: discuz中如何自定义数据表
下一篇: PMI考试收获的学习思维