------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 自定义异常时:如果该异常的发生,无法再继续进行运算
就让自定义异常继承RuntimeException
对于异常分两种:
a.编译时被检测的异常
如函数内部抛出非运行时异常,而函数外没有抛出异常,则会编译失败
或者,程序调用抛出异常的函数时,没有对其进行处理。
b.编译时不被检测的异常(运行时异常,RuntimeException以及其子类)
在函数内部抛出运行时异常就可以。
2.finally通常用于关闭资源
3.格式-:try{
} catch() {
}
格式二:try{
} catch() {
} finally {
}
格式三:try{
} finally {
}
4.异常在子父类覆盖中的体现
a.子类在覆盖父类时,如果父类的方法抛出异常,那么子类覆盖方法,只能抛出父类的异常或者该异常的子类
b.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
c.如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
如果子类方法发生了异常,就必须要进行try处理,绝对不能抛。
5.只有出现System.exit(0);finally不会被执行到
6.继承体系中 相同的变量不会被覆盖
7.throw单独存在时,下面不要定义语句,因为执行不到。
8.包package
将class文件放到指定的文件中
javac -d c:\file Test.java
javac -d . Test.java //放到当前文件中
9.包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰
不同包中的子类还可以直接访问父类中被protected权限修饰的成员
包与包之间可以使用的权限有public protected
public protected default private
同一个类中 ok ok ok ok
同一个包中 ok ok ok
子类 ok ok
不同包 ok
10.一个文件中不允许出现两个同为public的类
11.import 为了简化类的书写
建议不写通配符* 占内存
12.进程:是一个正在执行中的程序
每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元
线程:就是进程中的一个独立的控制单元。
线程在控制着进程的执行。
一个进程中至少有一个线程。
java JVM 启动的时候会有一个进程java.exe
该进程中至少一个线程负责java程序的执行。
而且这个线程运行的代码存在于main方法中
该线程称为主线程。
其实更细节的说jvm,它启动不止一个线程,还有负责垃圾回收机制的线程。
13.如何定义一个线程呢?
方式一:继承Thread,覆盖run方法
步骤:a.定义类继承Thread
b.复写Thread类中的run方法
目的:将自定义的代码存储在run方法中
c.调用线程的start方法,
该方法有两个作用:启动线程,调用run方法
14.发现运行结果每一次都不同。
因为多线程都获取cpu的执行权。cpu执行到谁,谁就运行。
明确一点,在某时刻只能有一个程序在运行(多核除外)。
cpu在做着快速的切换,以达到看上去是同时运行的效果。
这就是多线程的一个特性:随机性,谁抢到谁执行,至于执行多长时间,cpu说了算。
15.为什么要覆盖Thread的run方法?
Thread类用于描述线程。
该类就定义了一个功能,用于存储线程类要运行的代码,该存储功能就是run方法
也就是说Thread类中的run方法,用于存储线程要运行的代码。
16.
/*
练习:创建两个线程和主线程同时运行
原来线程都有自己默认的名称
Thread-编号 该编号从0开始
static Thread currentThread();获取当前线程对象
相当于 this
getName();获取线程名称
设置线程名称:setName或者构造函数
*/
class ThreadDemo
{
public static void main(String[] args)
{
Demo d1 = new Demo("one");
Demo d2 = new Demo("two");
d1.start();
d2.start();
//d.run();这样仅仅是对象调用方法,而线程创建了,并没有运行
for(int x=0;x<100;x++)
{
System.out.println("hello world"+x);
}
}
}
class Demo extends Thread
{
public Demo(String name)
{
super(name);
}
public void run()
{
for(int x=0;x<100;x++)
{
//this.getName()获得线程的名字,每个线程都有自己的名字
//Thread-编号 该编号从0开始
System.out.println(this.getName()+"demo"+x);
System.out.println((Thread.currentThread()==this)+this.getName()+x);
}
}
}
17.局部变量在每一个线程中都有一份