java中遗留的小问题
一、类型转换
short s = 1; s = s + 1; //false,因为1是int类型,会损失精度
short s = 1; s += 1; //true,因为+=有自带强转
二、逻辑运算符
^逻辑异或:相同为false,不同为true
例如:情侣关系:男男、男女、女男、女女
三、参数传递
基本类型:形参的改变对实参没有影响
引用类型:形参的改变直接影响实参
四、成员变量和局部变量
成员变量:在类中方法外
局部变量:在类中方法内
五、多态
同一个引用指向多个对象,表现各个不同对象的方法。
父 f = new 子1();
父 f = new 子2();
父 f = new 子3();
六、抽象类:abstract
抽象类有构造方法,但是不能实例化;
成员方法既可以是抽象的(强制要求子类实现抽象方法,被abstract修饰的抽象方法无方法体(没有大括号{})),也可以是非抽象的(子类继承用,提高代码复用性)。
作用:用于子类访问父类数据的初始化。
抽象类不能使用private/final/static关键词
七、局部内部类访问局部变量
局部内部类访问局部变量必须用final修饰局部变量,使局部变量为常量来访问。
class Outer { private int num = 10; public void method() { //int num2 = 20; final int num2 = 20; class Inner { public void show() { System.out.println(num); //从内部类中访问本地变量num2; 需要被声明为最终类型 System.out.println(num2);//20 } } Inner i = new Inner(); i.show(); } }
八、TreeSet排序
1.自然排序:(元素比较)
让元素所属的类实现自然排序接口 java.lang.Comparable,必须重写compareTo方法。
2.比较器排序:(集合比较)
让集合的构造方法接收一个比较器接口的子类对象 java.util.Comparator。
内部类:
TreeSet<T> treeSet = new TreeSet<T>(new Comparator<T>()( public int compare(T t1, T t2) { int num = t1.getName().length() - t2.getName().length(); int num2 = num == 0 ? t1.getName().compareTo(t2.getName()) : num; int num3 = num2 == 0 ? t1.getAge() - t2.getAge() : num2; return num3; } ));
九、Map遍历
A、根据键找值
//创建集合对象 Map<K,V> map = new HashMap<K,V>(); //获取所有的键(键的集合) Set<K> set = map.keyset(); //遍历键的集合 for(K key : set) { V value = map.get(key); syso(key + "-" + value); }
B、根据键值对对象找键和值
//创建集合对象 Map<T,V> map = new HashMap<T,V>(); //获取所有键值对对象的集合 Set<Map.Entry<K,V>> set = map.entrySet(); //遍历键值对对象的集合,得到每一个键值对对象 for(Map.Entry<K,V> me : set) { K key = me.getKey(); V value = me.getValue(); Syso(key + "," + value); }
十、contains()方法底层依赖的是equals()方法,所以判断对象包含另一对象,需先重写equals()方法。
十一、Arrays工具类:public static <T> List<T> asList(T... a):把数组转成集合
十二、new FileInputStream("") 和 class.getClassLoader().getResourceAsStream("")
前者根目录为项目根目录或者绝对路径,后者根目录为src目录