Java基础知识(二)

本文是自己学习Java的一个笔记,记录的内容可能会比较杂,主要是针对平时的开发和面试可能问到的内容的。上一篇文章的链接是:Java基础知识(一)

int、integer的区别(JAVA基本类型和包装类)

之前我转载的文章: java包装类

  • int是基本数据类型,integer是int的封装类,Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表。
  • 作为类的成员变量初始值不同,int为0,integer为null。
  • 有new integer值的时候,对象里存的是引用地址,故不能用==直接比较,而应该封装类的方法equals来判断。

String和StringBuffer,StringBuilder的区别

  • String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
  • 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。它是线程安全的,速度相比StringBuilder慢,适用于多线程。
  • StringBuilder:线程非安全的,速度快,适用于单线程。

java虚拟机(Java virtual machine,JVM)

Java程序必须在虚拟机上运行。虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
关于java虚拟机的知识,需要阅读《深入了解JVM》(深入理解java虚拟机)这本书。
这里我只是粗略的描述一下JVM的作用,详细的相关内容我会在后面补充~

final,finally和finalize的区别

见我之前的文章:final,finally和finalize的区别

HashMap和Hashtable的区别

  • HashMap允许null值和null键,Hashtable不允许。
  • hashtable速度慢一些,因为hashtable是同步的(Hashtable的方法是Synchronize的)。
    hashmap的原理,之前我的文章有过笔记。

String s = new String(“abc”);创建了几个String Object?

两个:一个是“abc”;一个是指向“abc”的对象s。(老问题)

关于Math.round()函数

Math.round(11.5)返回12;Math.round(-11.5)返回-11。

overload(重载)和override(重写)

方法的重载overload和重写override是Java多态性的不同表现。

  • 重写是父类和子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,该方法被重写。子类的对象在调用这个方法时,会调用子类中的方法。
  • 重载是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们有不同的参数个数或者不同的参数类型,这称为方法的重载。

abstract class和interface

这个也是一个老问题了,看我之前的文章:abstract和interface的区别

关于Java的值传递

可以这么说,Java语言中都是值传递参数。当一个对象实例作为一个参数传递到方法中的时候,参数的值是该对象的引用。

Java中的单例

举一个我在项目中经常用到的:


public class SingletonClass {
    private static SingletonClass instance = null;
    public static synchronized SingletonClass getInstance(){
        if(instance == null){
            instance = new SingletonClass();
        }
        return instance;
    }
}

这里有很多种单例的写法,我只列举了我经常用的一种。

ArrayList和Vector的区别

  • Vector是线程安全的,也就是同步的;而ArrayList是线程不安全的,相应的执行效率也高一些。
  • 当存储的数据增长时,Vector变为原来的一倍,ArrayList变为原来的一半。

上面有一些问题是我在网上看到的,很多比较常见,比较基础,我在这里做一个笔记,希望自己能把这些知识牢牢记在心里。后面我还会继续更新第三部分,同样是java的基础知识,希望能有所帮助~文章后面的参考里关于虚拟机的知识很值得参考。

参考:
不费洪荒之力JAVA面试成功_2016最新版

String,StringBuffer与StringBuilder的区别??

深入理解Java虚拟机到底是什么

深入理解JAVA虚拟机JVM

jvm面试都有什么问题?

总结的JVM面试题

Java 进阶面试问题列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值