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目录

 

posted @ 2018-08-21 18:46  AyeeX  阅读(675)  评论(0编辑  收藏  举报