Java基础(二) | 零碎知识小贴士

特意将零碎的知识点都整理出来,方便快速查阅。

一、重载与重写

  • 重写:发生在子类中;与父类函数名相同,参数列表相同;返回值小于等于父类;访问权限大于等于父类;抛出异常小于等于父类;
  • 重载:在用一个类中,方法名相同,参数列表不同,包括参数个数、类型和顺序;返回值和访问权性可以相同,也可以不同;(注意子类继承父类中的重载与重写的区分)

二、类中成员的初始化顺序

  • 原则:
    父类中静态成员和静态代码块,按照代码顺序依次加载;
    子类中静态成员和静态代码块,按照代码顺序依次加载;
    父类中实例成员和实例代码块,按照代码顺序依次加载;
    父类中的构造方法开始初始化;
    子类中实例成员和实例代码块,按照代码顺序依次加载;
    子类中的构造方法开始初始化;

三、序列化与反序列化

  • 序列化是将Java对象转化为字节序列,反序列化是将字节序列转化为Java对象;
  • 序列化一方面实现数据的持久化,另一方面实现Java进程间对象通信
//Student类实现Serializable接口,transient关键字修饰属性不能序列化
  public static void main(String[] args) {
        Student s = new Student("lvziwei",22,"Xidian");
        File file = new File("D://s.txt");
        try {
            file.createNewFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try{
            //序列化对象,输入输出流的判别标准为从内存中读为输出流,向内存中写为输入流
            FileOutputStream fos = new FileOutputStream(file);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(s);
            oos.flush();
            oos.close();
            fos.close();
            
            //反序列化对象
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream ois = new ObjectInputStream(fis);
            Student ss = (Student) ois.readObject();
            fis.close();
            ois.close();
            System.out.println(ss.getSchool() + "->" + ss.getAge() + "->" + ss.getName());
        }catch(Exception e){
            e.printStackTrace();
        }   
    }

四、自动装箱与拆箱

  • 装箱,将基本类型用它们对应的引用类型包装起来;拆箱,将包装类型转换为对应的基本类型;
  • 编译器在编译期间,根据语法决定是否进行自动拆箱和装箱操作,减少常用数值的内存开销和创建对象开销;
// 下面以int为例解释
Integer i = 10; //自动装箱 Integer i = Integer.valueOf(10);
int i2 = i; //自动拆箱 int i2 = Integer.intValue(i);

Integer a = 10;
Integer b = 10;
System.out.println("i == b : " + (a == b)); //true 
Integer a1 = 200;
Integer b1 = 200;
System.out.println("i1 == b1 : " + (a1 == b1)); //false

//原因解释 IntegerCache.low = -128 IntegerCache.high = 127
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
//自动装箱时,如果整数值在-128~127之间,则自动返回缓存值;
//不在此范围内,则自动新建对象;
// 下面以String为例解释
 String str1 ="abc";
 String str2 ="abc";
 System.out.println(str2==str1); //输出为 true
 System.out.println(str2.equals(str1)); //输出为 true
 
 String str3 =new String("abc");
 String str4 =new String("abc");
 System.out.println(str3==str4); //输出为 false
 System.out.println(str3.equals(str4)); //输出为 true 

// 原因解释 "==" : 引用是否相同 "equals()" : 比较对象内容是否相同
// 字符串对象为不可改变对象,返回自身引用

五、Collection与Collections的区别

  • java.util.Collection 是集合类的顶级接口,为集合对象的操作提供通用接口;Java类中有大量的具体实现;
  • java.util.Collections 是一种包装类,包含有对集合操作的多种静态多态的方法;

六、序列号serialVersionUID

  • 作用
    确保版本间的兼容性,版本指的是Java类的版本;
  • 生成方式
    默认生成方式,serialVersionUID = 1L;
    由类名、接口名、成员方法和属性生成哈希值;
  • 作用原理
    如果没有显示声明,则会自动生成,序列化操作后保存在文件中;反序列化时,JVM从文件中读取该值,与该类自动生成的值进行比较,相同则可以进行序列化;如果在序列化之后,反序列化之前,对类进行修改,则会重新生成新的值,此时不能进行反序列化;建议使用显示声明默认的序列化值;

七、Iterable和Iterator的区别

  • 两者区别
    Iterable是java.lang包中的接口,调用iterator()方法,返回Iterator对象;
    Iterator是java.util包中的接口,具有hasnext()和next()方法;
    Collection接口继承于Iterable接口;
  • 设计两者同时存在的原因
    使用foreach(for增强)的类,均需要实现Iterable接口;
    Collection的子类集合均是数据结构,而Iterator为迭代对象,设计者希望一种数据结构有多种迭代对象;
    每次调用Iterable的iterator()方法,均会返回一个Iterator对象;

八、Map.Entry

  • 概念
    Map是Java的接口,Map.Entry是Map中声明的内部接口,保存Map的一个实体,其包含一个键值对;Map的entrySet返回一个类型为Map.Entry的集合;

九、Collection中的toArray()方法

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        Object[] i = list.toArray();
        Integer[] i = list.toArray();// 错误,只能转换为Object类型
        Integer[] ii = list.toArray(new Integer[0]);// 新建的数组长度随意,仅提供数组类型即可
    }

十、Java的跨平台性

  • Java由与平台无关的编译器生成字节码文件(.class文件),由与平台相关的解析器(不同平台的JVM)解析执行,来实现跨平台;

十一、switch支持的数据类型

  • switch支持byte、short、int和char四种基本类型,枚举和String类型;
    同时因为自动拆箱机制,支持四种基本数据类型的包装类;
public class TypeTest {
    public static void main(String[] args) {
        switch (new Integer(1)) {
        case 0:
            System.out.println("The num is : 0");
            break;
        case 1:
            System.out.println("The num is : 1");
            break;
        default:
            System.out.println("The num is null");
            break;
        }
    }
}
The num is : 1
// 基于Jclasslib查看字节码文件
 0 new #16 <java/lang/Integer>
 3 dup
 4 iconst_1
 5 invokespecial #18 <java/lang/Integer.<init>>
 8 invokevirtual #21 <java/lang/Integer.intValue> //此处实现自动拆箱,调用intValue方法
11 tableswitch 0 to 1   0:  32 (+21)
    1:  43 (+32)
    default:  54 (+43)
32 getstatic #25 <java/lang/System.out>
35 ldc #31 <The num is : 0>
37 invokevirtual #33 <java/io/PrintStream.println>
40 goto 62 (+22)
43 getstatic #25 <java/lang/System.out>
46 ldc #39 <The num is : 1>
48 invokevirtual #33 <java/io/PrintStream.println>
51 goto 62 (+11)
54 getstatic #25 <java/lang/System.out>
57 ldc #41 <The num is null>
59 invokevirtual #33 <java/io/PrintStream.println>
62 return

十二、JUC原子类

十三、小数计算精度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容