Java基础知识点

本文详细讲解了Java中'=='、equals()和hashcode()的区别,区分jre、jdk和jvm,并剖析int与Integer的不同,以及抽象类、接口、final与垃圾回收机制。此外,还涉及字符串操作、对象比较和内存优化等内容。

一、“==”、equals()和hashcode()的区别

        (1)“==”是运算符

                        对于基本类型,比较的是

                        对于引用类型,比较的是引用对象的地址

        (2)equals()是Object类的方法;

                        不能比较基本类型;

                        没有重写时,equals()相当于“==”,比较的是对象的地址;

                        重写equals()后,equals()比较的是对象的内容,如包装类(Integer)、String。

        (3)hashcode()是Object类的方法,返回的是对象的哈希值;

                        同一个对象的哈希码一定相等,不同对象的哈希码也有可能相等;

                        当equals()重写时,通常有必要重写hashcode()。

                PS:   equals()比较相等的两个对象的hashcode一定相等,不等的哈希码也有可能相等。

二、jre、jdk、jvm

        (1)jdk是Java开发工具包

        (2)jre是Java的运行环境(Java Runtime Environment)

        (3)jvm是Java虚拟机

        PS:jdk包括jre,jre等于JVM+Java核心类库。

        JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。

三、int和Integer的区别

        (1)int是Java的一种基本数据类型,Integer是int的包装类

        (2)Integer变量要先实例化

        (3)Integer实际上是对象的引用,指向的 是对象的地址

        (4)Integer的默认值是null,int默认值是0

四、普通类和抽象类

        (1)含有抽象方法的一定是抽象类,抽象方法只需声明,不需要实现

        (2)抽象类可以有抽象方法,也可以有普通方法

        (3)抽象类不能被实例化new,子类继承抽象类,必须实现所有的抽象方法,否则仍是抽象类

        (4)抽象方法不能被static、final修饰

五、接口和抽象类

        (1)接口中只含有抽象方法,java8之后可以定义静态、default方法;抽象类中可以有普通方法

        (2)关键字不同:interface、abstract

        (3)一个类可以实现多个接口,但只能继承一个抽象类

        (4)接口强调特定功能的实现,抽象类强调从属关系

        (5)接口的成员变量默认public static final,必须赋值且不能修改;抽象类中的成员变量默认是default,可以在子类中重新定义或赋值

PS:在一些对时间要求比较高的应用中,倾向于使用抽象类,它比接口快一点。如果希望把一系列行为规范在类继承层次内,且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。一般情况下,接口定义函数,抽象类定义默认实现

六、final、finally、finalize

        (1)final:Java中的关键字

                修饰类,不能被继承;

                修饰方法,不能被重载;

                修饰变量,声明给初值,值不能修改

        (2)finally:Java的异常处理机制

                无论异常是否发生,都会执行finally块中的内容。如关闭数据库。

        (3)finalize():垃圾回收器删除对对象调用的方法

七、Math.round(-1.5)值是多少?

        (1)Math.ceil():向上取整

                Math.ceil(1.3)=2

                Math.ceil(-1.3)=-1

        (2)Math.floor():向下取整

                Math.floor(1.3)=1

                Math.floor(-1.3)=-2

        (3)Math.round():四舍五入,即+0.5后向下取整

                Math.floor(1.5)=2

                Math.floor(-1.5)=-1

八、String str =new String("ab")、String str1 = “ab”、str.intern()的区别

        (1)String str = new  String("ab") 是直接在堆内存中创建一个对象,不管是否已存在

        (2)String str1 = “ab” 先去常量池看是否存在元素“ab”,有就将地址赋给str1,没有就新建一个后再赋值

        (3)s1.intern()是拿着堆内存中的对象去常量池中看是否存在,不存在就在常量池中创建一个

九、String 如何反转

        先将对象封装到StringBuilder中,再调用reverse()方法

public class tq{
    public static void main(String[]args){
        String str ="abcd";
        StringBuilder st1 = new StringBuilder(str);
        System.out.println(st1.reverse().toString());
    }
}

十、String、StringBuilder、StringBuffer的区别

        (1)String:不可变量,即使重新赋值,也只是创建一个新的对象,而原对象仍存在,等待垃圾回收器销毁

        (2)StringBuilder:代表了一个字符序列可变的字符串,可通过调用StringBuilder的append()、insert()、reverse()、setCharAt()、setLength()改变这个字符串的字符序列。

                当一旦通过StringBuffer生成最终想要的字符串,再调用它的toString()方法转为String对象。

        (3)StringBuffer:用法与StringBuilder一样

        (4)“+”每次拼接都会new一个对象,而stringBuffer.append()不需要new,所以速度快,节省内存。

        (5)StringBuilder线程不安全,效率高,常用于单线程

                StringBuffer线程安全,由于加锁的原因,效率较低,常用于多线程

十一、String类的常用方法

        (1)常用获取功能

                length、charAt(int index)、indexOf(int ch)

                subString(int startindex)、subString(int startindex,int endindex)按下标进行截断

                split(",") 按“,”进行分割

                e.g. String str = “123,456,789”

                String str1 = str.split(",")[2].subString(0,2)   //78

        (2)常用判断功能(结果是boolean值)

                equals、contains、startsWith、endWith、isEmpty()

        (3)常见转换功能

                toUpperCase()、toLowerCase()

        (4)其他

                trim()去掉两端空格

                replace(String old,String new)将指定字符串进行替换

十二、实例化对象有哪几种方式?

        (1)new

        (2)clone()

        (3)反射

//用Class.forName()获取类,再调用类的newInstance()方法
Class<?> cls = Class.forName("com.Dao.User");
User U = (User)cls.newInstance();

        (4)序列化反序列化

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值