1.java面向对象3大特性
-
封装
属性封装和方法封装,属性私有,对外提供getset方法 -
继承
Java中的继承是指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以拥有父类的成员变量以及成员方法(但是不一定能访问或调用,例如父类中private私有的成员变量以及方法不能访问和调用)。继承的作用就是能提高代码的复用性。子类拥有父类中的一切(拥有不一定能使用),它可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。 -
多态
方法的重载和重写 、父类的引用指向子类对象
- == 和equals
== 是判断值和内存地址是否都一样
public static void main(String[] args) {
/*
* Ingeter 源码 当值在-128 到127时,用的是缓存中的int值,所以i1==i2为true,i3==i4为false
* public static Integer valueOf(int paramInt)
{
if ((paramInt >= -128) && (paramInt <= IntegerCache.high)) {
return IntegerCache.cache[(paramInt + 128)];
}
return new Integer(paramInt);
}
*/
Integer i1 = 127; //相当于Integer i1 = Integer.valueOf(123);//装箱操作
int i5 = 127; //int num2 = i1.intValue();//拆箱操作
Integer i2 = 127;
System.out.println(i1==i2); //true
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 ==i4);//false
}
字符串常量池中不会存在相同内容的字符串
String str = "abc"; //ldc #16 <abc>
String str1 = new String(); // new #18 <java/lang/String>
String st2 = str + str1; //1.先new StringBuilder ,在append拼接,在toString(new String());
String str4 = new String("abc"); //1.new 关键在堆空间创建2.字符串常量池
3.集合
-
Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
HashMap允许K/V都为null;后者K/V都不允许为null; ConcurrentHashMap采用Segment + HashEntry的方式进行实现 HashSet 是不能重复插入的
-
Collection 下有 Set 和List
LinkedList 实现了 List 和 Deque 接口,一般称为双向链表;ArrayList 实现了 List 接口,动态数组;
LinkedList 在插入和删除数据时效率更高,ArrayList 在查找某个 index 的数据时效率更高;
LinkedList 比 ArrayList 需要更多的内存;
4.StringBuffer(线程安全) 和StringBuilder(线程不安全)
5.Thread的start和run的区别
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。
run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!
6.oracle左连、又连、inner join 、union、union all
左连 返回左边的数据和右边有条件相等的值
右连 返回右边所有的值 和左边有相等值
inner join必须是两表都存在的值
union是取两表结构相似 有重复值只取一次
union 是取所有的值
7.oralce优化
- SELECT子句中避免使用 ‘ * ‘
- 不要用not避免
- 在索引列上使用计算、避免在索引列上使用IS NULL和IS NOT NULL 列值为空时会停止索引
- 注意通配符%的影响
- 如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高.
- 用(UNION)UNION ALL替换OR (适用于索引列)
8.java优化