java基础

一、Object类方法详解

1. getClass 获取当前运行时对象的Class对象

例如:

public class Demo01 {
    public static void main(String[] args) {
        Object ob = new Object();
        System.out.println(ob.getClass());
    }
}

返回:

class java.lang.Object

2. hashCode 返回对象的hash码

例如:

public class Demo01 {
    public static void main(String[] args) {
        Object ob = new Object();
        System.out.println(ob.hashCode());
    }
}

返回:

1072591677

3. clone 拷贝当前对象

被拷贝对象的类,必须实现Cloneable接口。浅拷贝对基本类型进行值拷贝,对引用类型拷贝引用;深拷贝对进本对基本类型进行值拷贝,对引用类型对象不但拷贝对象的引用还拷贝对象的相关属性和方法。两者不同在于深拷贝创建了一个新的对象。

请添加图片描述
请添加图片描述

4. equals 通过内存地址比较两个对象是否相等,String重写了这个方法使用值来比较是否相等

==:

  1. 基本数据类型:比较数值是否相等
  2. 引用数据类型:比较的对象地址是否相等

equals:
equals的底层是==通过String重写了equals后使用值来进行比较

5. toString 返回类名@哈希码的16进制

例如:

public class Demo01 {
    public static void main(String[] args) {
        Object ob = new Object();
        System.out.println(ob.toString());
    }
}

返回:

java.lang.Object@3fee733d

6. notify 唤醒当前对象监视器的任意一个线程

7. notifyAll 唤醒当前对象监视器上的所有线程

8. wait 暂停线程的执行

三个不同参数方法(等待多少毫秒;额外等待多少毫秒;一直等待);与Thread.sleep(long time)相比,sleep使用当前线程休眠一段时间,并没用释放该对象的锁 ,wait释放了锁。

9. finalize 对象被垃圾回收器回收时执行的方法

二、java中的基本数据类型

  • 整型:
    • byte:1字节,8位
    • short:2字节,16位
    • int:4字节,32位
    • long:8字节,64位
  • 浮点型:
    • float:4字节,32位
    • double:8字节,64位
  • 布尔型:boolean只有true和false
  • 字符型:char 2字节,16位

三、String,StringBuffer,StringBuilder的区别

  • String:由char[] 数组组成,使用了final修饰,是不可变对象,可以理解为常量,线程安全;对String进行改变是每次都会新生成一个新String对象,然后把指针指向新的引用对象。
  • StringBuffer和StringBuilder都是字符串缓冲区,StringBuffer线程安全但是速度慢,StringBuilder线程不安全但是速度快。
  • 操作少量字符串时用String;单线程操作大量数据用StringBuilder;多线程操作大量数据时用StringBuffer。
  • StringBuffer慢是因为方法都用synchronized修饰了导致执行效率低。

四、面向对象三大特性

  • 封装: 把一个对象的属性私有化,我们可以根据提供的访问方法来控制外界去访问指定的属性
  • 继承: 是使用已存在的类作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过付父类我们能够非常方便的复用以前的代码。
    • 一个子类只能继承一个父类,但是一个父类可以被多个子类继承。
    • 子类可以拥有父类非private的属性和方法。
    • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
    • 子类可以用自己的方法实现父类的方法。(重写)
  • 多态: 父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的扩展性。在java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一个方法)。

隐藏的第四大特性:抽象
抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

五、重载与重写

  • 重载: 发生在同一个类中,方法名相同,参数的类型,个数,顺序不同,方法的返回值和修饰符可以不同。
public class User{
    private String name;
    private Integer age;
    
    public void run(){
        System.out.println("跑");
    }
    public void run(String name){
        System.out.println(name + "在跑");
    }
    public void run(String name, Integer age){
        System.out.println(age + "岁的" + name + "在跑");
    }
}
  • 重写: 发生在父子类中,方法名和参数相同,返回值范围小于等于父类,抛出异常范围小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private或者final则子类就不能重写该方法。

继承上面的User类

public class Demo1 extends User{
    @Override
    public void run() {
        System.out.println("奔跑");
    }
}

六、final修饰符

  • 修饰基本数据类型变量,一经出现初始化后就不能够对其进行修改。
  • 修饰引用类型变量,不能够指向另一个引用。
  • 修饰符或方法,不能被继承或重写。

七、抽象类和接口的区别

相同点

  • 接口和抽象类都不能实例化
  • 都位与继承的顶端,用于被其他实现或继承
  • 都包含抽象方法,其子类都必须覆写这些抽象方法

不同点

参数抽象类接口
声明抽象类使用abstract关键字声明接口使用interface关键字声明
实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,他需要提供抽象类中的所有声明的方法和实现子类使用implements关键字来实现接口。他需要提供接口中所有声明的方法实现
构造器抽象类可以有构造器接口不能有构造器
访问修饰符抽象类中的方法可以是任意访问修饰符接口方法默认修饰符是public。并且不允许定义为private或者protected
多继承一个类最多只能继承一个抽象类一个类可以实现多个接口
字段声明抽象类字段声明可以是任意的接口的字段默认都是static和final的

八、值传递

  • 值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。
  • 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。

九、throw和throws的区别(异常)

throw是语句抛出一个异常。
语法:throw (异常对象);
throw e;
throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
语法:(修饰符)(方法名)([参数列表])[throws(异常类)]{…}
public void doA(int a) throws Exception1,Exception3{…}

九、集合框架

在这里插入图片描述
**Collection:**可以用来存储一组不唯一(可重复),无序(存储时无顺序)的数据
**List:**可以用来存储一组不唯一,有序(存储时有顺序,先存的在前面,后存的在后面)的对象
**Set:**可以用来存储一组唯一,无序的对象
**Map:**存储的是键值对数据
ArrayList和LinkedList的区别:
相同点: 都是 List 接口的实现类,可以存储可重复的,有序的数据
不同点:

  • ArrayList 底层数据结构是数组结构,在实现数据的查询时,因为数组结构有下标,所以效率较高。但是,在增加或删除数据时,因为数组结构长度不可变,所以会创建一个新的数组,导致效率较低。
    它适合于查询较多,增删较少的情况。
  • LinkedList 底层数据结构是链表结构,在增加或删除数据时,尤其是首尾的增删,因为链表结构增加节点或删除节点,只需要修改下一个连接的地址即可,效率较高。但是,在实现数据的查询时,没有下标,只能从首节点依次进行查询,效率较低。
    它适合于增删较多,查询较少的情况。

十、反射

十一、多线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值