9.14-9.15
1.java是单继承,可继承多接口。
2.final变量一定要初始化,否则会出错,final变量不可更改。
3.类的成员的访问权限设置为默认,则该成员可以被同一个包的类访问。
4.java的多态调用中,new的是哪一个类就是调用哪一个类的方法(错误),原因:java多态有两种情况—覆写和重载。
列子:(子类继承父类,但是没有实现方法,当进行向上转型赋值时,调用的方法就只是父类的,则并不是new哪个类就调用哪个类的方法。)
5.初始化过程:
①初始化父类中的静态成员变量和静态代码块;(只执行一次啊)
②初始化子类中的静态成员变量和静态代码块;
③初始化父类的普通成员变量和代码块,再执行父类的构造方法;(每次new的时候都会执行一次)
④初始化子类的普通成员变量和代码块,再执行子类的构造方法;
6.创建servlet实例是由servlet容器来完成的,且创建servlet实例是在初始化方法init()之前。
9.16
1.在Java中,数组是一个对象,不是一种原生类(什么是原生类?),数组存储在堆中的连续内存空间中。
2.string是final修饰的,创建常量的话,会直接在放在字符串常量池中,当创建同样的字符串时,发现常量池中有则会直接使用。
如:String s1=“hello”; String s2 = “hello”; s1 == s2; 返回为true。
String s3 = new String (s1); s3存放的是地址空间。
3.(线程) sleep()和wait()方法时,线程会被阻塞,会引发系统的checked exception(编译期异常),可能会抛出interruptedEception。
4 .**(软测)**无价等效类就是和有效等价类反着来的,有效等价类就是值输入数据完全满足程序的输入规格说明。
5. ResultSet(结果集)跟普通的数组不同,索引从1开始而不是0开始。
6. 基本数据类型:boolean类型和数值类型—整数型和浮点型。默认的浮点型为double。
引用类型包括类、接口和数组类型以及特殊的null类型。
7.int、Integer、new Integer进行比较时,永远为true。
Integer与new Integer()比较时永远为false。
Integer和Integer比较时,看范围,如果在 [-128~127)则为true,否则为false。
8.方法重写(override),两同两小一大原则:
方法名相同,参数类型相同。
子类返回类型小于等于父类方法的返回类型。
子类抛出异常小于等于父类方法的抛出异常。
子类访问权限大于等于父类方法的访问权限。
9.非运行异常要捕获,抛出(try catch,throws)。运行异常java虚拟机已经捕获了。
10.super()、this()只能位于构造器的第一行,不能同时使用。
super调用父类构造函数,this调用自己的构造函数。
super和this都是指对象,不能在static环境中使用,包括:static变量、static方法。
11.
https://www.cnblogs.com/wxw7blog/p/7770763.html
err输出错误
调试程序的时候尽量使用err来输出,这样可以很清晰的定位到任何一个步骤,而out输出的位置顺序很可能和你期望的不一样。
err 输出是红色的。
9.17
1.编译看左边,运行看右边。
比如说:Animal b=new Dog();
编译器会把当前类型当做父类类型Animal,但是运行的时候是右边子类类型Dog,所以在父类中调用某个子类的方法时,是不存在的,会出现编译报错。
2.start()是启动线程的方法,是启动动作。
继承Thead,重新override—run()方法,或者实现Runable接口,实现run方法。run方法就是线程执行的入口。
3.虚函数是c语言中的,不可能是static的成员函数。
static为成员变量或函数,在类初始化时加载完成,可以被成员函数调用或者访问。
static成员函数既可以通过类名直接调用,也可以通过对象名进行调用。static成员函数可以访问static成员变量。
4.java中一切都是对象,Object是所有类的根类。
5.list有序可以重复,set无序不可重复。
6.三元操作符类型的转换规则(未写完):
①若两个操作数不可转换,则不做转换,返回值为Object类型。
②若两个操作数都是直接量数字,则返回值类型为范围较大者。
如:Object o1 = true ? new Integer(1) : new Double(2.0);
可以看作:Object o1 = true ? new Double(1.0) : new Double(2.0);
9.29
1、使用泛型的好处
①类型安全
②消除强制类型转换
③潜在的性能收益
(泛型只是提高了数据传输的安全性,并没有改变程序的运行性能)
2、处理线程安全
synchronized(同步):主要用来给方法、代码块加锁,被加锁的代码段,同一时间内多线程同时凡个人同一对象的加锁方法/代码块时,只有一个线程执行能执行方法/代码块中的代码,其余线程必须要等待当前线程执行完以后才能执行该方法/代码块。
volatile关键字(反复无常的、不稳定的)
保证了不同线程对该变量操作的内存的可见性(当一个线程修改了变量,其他使用此变量的线程可以立刻知道这一修改)
禁止了指令重排序
Lock接口提供了和synchronized关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。
3、java异常和错误的基类Throwable,包括Exception和Error。
4、try…catch…finally finally不管什么异常都会执行
5、java是面向对象的,但不是所有的都是对象,基本数据类型就不是对象,所以才有封装类的
6、int i = 5; i = ++(i++);
不可以这样写,出错呢 最里面的i++ 不是一个变量。
7、java的几大特征:抽象、继承、封装、多态。
多态的表现形式是重写和重载。
8、int a[][] ={{1,2},{3,4},{5,6}}
三行两列的
9.final关键字的特点!!!!
①final修饰变量,等同于常量
②final修饰方法中的参数,称为最终参数
③final修饰类,则类不能被继承
④final修饰方法,则方法不能被重写,但可以被重载。
⑤final不能修饰抽象类。