1、多线程:
1、 手写生产者消费者模式
2、 同步代码块/同步方法——<独占>
3、 死锁、A等B,B等A
2、异常
1、关键字:try,catch,finally,throw,throws
2、try,catch自己解决遇到的问题
3、finally 最终要完成的工作
4、throw当前方法中所有有可能遇到的异常,具体问题
举例:
public class Test {
public static void main(String[] args) {
System.out.println(getNum());
}
private static int getNum() {
try {
System.out.println("*******try********");
return 1;
} catch (Exception e) {
System.out.println("*******catch********");
return -1;
}finally{
System.out.println("*******finally********");
return 0;
}
/**
* 若返回值在之前必能返回,则此句不可达
*/
// System.out.println("game over.");
// return 100;
}
}
不会报错,只会有警告
若程序没有异常,则返回值为?会先执行try,后执行finally,返回值为0
具体为:方法走到try时发现return语句,(因为有finally)不会执行return语句,会去先执行finally中的程序,发现finally中有return就会执行finally中的return,若发现finally中没有return语句,会返回try中的return值
try {
//程序走到此处会报错,但也会先执行finally中的语句再报错
System.out.println(1/0);
System.out.println("*******try********");
} catch (NullPointerException e) {
//捕获不到此例异常
System.out.println("*******catch********");
}finally{
System.out.println("*******finally********");
System.out.println("haha");
}
3、wait与sleep区别:
wait(等,被通知)[被动]是Object类的方法,主要应用于同步代码块或同步方法
sleep(睡,到睡醒)[自发]是Thread的静态方法
SystemClock.sleep(),类似于sleep()方法,但有一个优点是:不用处理异常
4、public修饰类
一个类如果用public修饰,则类名必须与文件名相同。
另外:若此类中有内部类,内部类可以用public修饰(一山不容二虎,除非一公一母)
5、接口
a、接口中的字段默认是并且必须是public static final类型
public(以便其它类调用接口时使用)
static(因为接口不能被实例化,若不是static,则此属性依赖对象,而接口不能建立对象,其他类无法使用此属性)
final(接口是标准规范,如果没有final的话,由子类随意去修改的话,接口建立这个常量就没有意义了)
b、接口中不能有构造块(构造块执行在构造方法之前,而接口不能实例化)
接口中不能有静态代码块???静态代码块在类加载时必须执行,而接口则依赖于具体的实现类
c、接口中不能有静态方法???static与类绑定而不是对象,所以不支持多态、继承等?接口中的方法如果定义成static,则无法被子类实现,这与抽象方法必须由子类实现相矛盾。
6、重写
重写的作用:如果父类的引用指向子类的对象,则执行子类的方法,而不执行父类的方法
注意:static如果父类中的方法是static修饰的,子类中出现与之相同的方法,并不能保证一定被重写
而只关注调用方法的对象,此对象声明时为父类就执行父类方法,声明时为子类就执行子类的方法
Dog dog0 = new Dog("汪星人");//父类:在叫,子类:汪汪叫
dog0.speak();//汪星人汪汪叫
Pet dog=new Dog("汪星人");
dog.speak();//汪星人在叫
7、改变成员变量要在方法中或块中修改
String sta = "hehe";
// sta = "ab";报错
{
sta = "bb";
}
public void get() {
sta = "bb";
}
8、关于static静态代码块与构造方法与构造代码块的执行次数和执行顺序
静态代码块最先执行,在类加载时执行,且只执行一次
构造代码块与构造方法每次创建对象都会执行,构造代码块执行在构造方法之前
public class Play2 {
public static void main(String[] args) {
A ab = new B();
System.out.println("-------------------");
ab = new B();
}
}
class A {
static {
System.out.println(“1”);
}
{
System.out.println(“aa”);
}
public A() {
System.out.println(“a”);
}
}
class B extends A {
static {
System.out.println(“2”);
}
{
System.out.println(“bb”);
}
public B() {
System.out.println(“b”);
}
运行结果:
1
2
aa
a
bb
b
-------------------
aa
a
bb
b
9、有关进制的识别 ,字符和int的转换,断句
public static void main(String[] args) {
System.out.println(11);// 11
// 编程语言中常常以数字0开始表明该数字是八进制
System.out.println(011);// 9
// 以0x开始的数据表示16进制
System.out.println(0x11);// 17
System.out.println(0X11);// 17
// 将十进制数字转换为二进制字符串
String str = Integer.toBinaryString(11);
System.out.println(str);// 1011
// 空格代表一个字符,ascii值为32
// 65~90为26个大写英文字母,97~122号为26个小写英文字母
int i = ' ';
System.out.println(i);
// 没有空格和多个空格均报错,因没有对应的ascii值
// int i = '';
// int i = ' ';
int j = 'a';
System.out.println(j);// 97
j = 'a'+1;
System.out.println(j);// 98
// 关于断句
int a = 1;
int b = 1;
// int num = a+++++b;//报错
int num = a++ + ++b;
}
10、ImageView的setImageResource()与setBackgroundResource()方法的效果:
图一:setImageResource()
图二:setBackgroundResource()