equals()和==的区别? ① ==可以比较基本类型,也可以比较引用类型;equals只能比较引用类型。 ② ==比较基本类型时比较的是值本身,比较引用类型比较的是地址值; Object类中的equals()方法使用的是“==”,比较的是引用类型的地址值; 如果重写以后,按照重写时定义的规则进行比较。 String类重写了equals()方法,可以直接用来比较简单字符串是否相等。 数组有没有length方法?字符串有没有length属性? 数组有的是length属性,数组名.length表示数组的长度; 字符串有的是length()方法,字符串.length()表示获取当前字符串长度,返回一个int类型的值。 调用toUpperCase()或者toLowCase()前后字符串是否变化?为什么? 没有变化。 String底层是一个被final修饰的char类型数组,不能重新赋值。 如果强行重新赋值,实质上是在常量池中创建并指向一个新的字符串,不再是原本的字符串。 在调用时,只是调用了一个拥有返回值的方法,放在输出语句里输出,没有重新赋值,原字符串没有改变。 String、StringBuffer和StringBuilder区别? String:是不可变字符串,声明时可以直接用字面量赋值。每次修改字符串时都会创建新对象, 性能很差,适合操作少量数据。 StringBuffer和StringBuilder:是可变的字符串对象,适用于频繁修改, 修改性能好,开销小。声明时不能直接使用字面量赋值,必须创建对象,调用构造函数。 StringBuffer是JDK1.0提供的,线程安全;StringBuilder是JDK5提供的,线程不安全,但效率更高。 什么是自动拆装箱? 发生在基本数据类型和包装类的转换时,JDK5之后提供了新功能:自动拆装箱。 自动拆箱:包装类自动转换为基本类型 自动装箱:基本类型自动转换为包装类 该特性是编译器认可的,不是虚拟机认可的, 当编译器在编译代码时发现有基本类型与包装类相互复制操作时, 会自动添加转换的代码,这样我们在源代码中就不需要编码来完成相互的转换了。 1.如何进行字符串和日期之间的转换? 字符转换为日期使用 SimpleDateFormat工具类 可以实现String和Date转换, new SimpleDateFormat()一个对象括号里设置格式 年 yyy 月 MM 日 dd 时 HH 分 mm 秒ss 字符串要与设置的格式相同 ,然后使用parse()方法在使用Date类型 接收这样就完成了字符串转日期类 而日期类转 字符串需要使用 format() 方法 括号里放日期类对象名,用字符串接收 2.Date与Calendar的区别?如何相互转换? ① Date类是日期类,Calendar类是日历类,获取对象后输出内容不同。 ① Calendar类是一个抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(), 用于返回Calendar的子类对象,该子类对象是根据当前默认时区和语言环境所获取的。Date可以直接创建对象。 ② Calendar类出现于Date类之后,在很大程度上替代了Date方法, 该类将所有可能用到使用到的时间信息都封装为静态成员变量,方便使用。 Calendar 转 Date需要使用Date类的getTime()方法.然后使用Date对象来接收 Date 转 Calendar 需要使用 Calendar子类的的setTime()方法.直接转成Calendar; 1.什么是javaBean规范? 1.必须是一个被public修饰的公开的类 2.成员变量必须被private修饰\ 3.必须有个公开的无参构造 4.为私有属性提供符合命名规范的get/set方法 5.必须实现Serializable接口 2.什么是序列化、反序列化? 也叫串行化,把java对象按照其结构转换成字节序列叫序列化 是将字节还原成对象的过程叫反序列化 3.什么是数据持久化? 把序列化后的字节在经过对象流连接文件流写出然后文件流会将字节存入磁盘进行长久保存 4.Error和Exception的区别 Error是系统级错误,是java运行环境或是硬盘问题,程序不能解决这个问题只能退出 Exception:是程序需要处理的异常,是程序设计的不完善出现的问题. 5.RuntimeException和CheckedException的区别 RuntimeException 是运行时异常 :是逻辑上的错误,不会编译报错 CheckedException 受检查异常需要java强制处理的非运行时异常 比如 IOException异常,SQLException 6.简述java中的异常处理机制 异常处理 有两种: 1.直接用throws 抛出异常 2.是使用 try{ 代码片段}catch(XXXException 参数){ 处理try中的异常代码 }来捕获异常 7.final、finally、finalize的区别 final 是表示最终的不可变的 修饰类不可别继承.修饰方法不可被重写,修饰变量不可别改变, finally是java异常处理机制的最后一块,放在try/catch后.只要程序执行try中代码 无论finally中的代码是否抛出异常,除了退出程序外,代码必定会被执行 finalize 是Object的一个方法,返回void.当垃圾回收器GC释放该对象前调用的方法, 意味着这个方法调用完毕,这个对象就会被释放. 2.什么是序列化、反序列化? 也叫串行化,把java对象按照其结构转换成字节序列叫序列化 是将字节还原成对象的过程叫反序列化 3.什么是数据持久化? 把序列化后的字节在经过对象流连接文件流写出然后文件流会将字节存入磁盘进行长久保存 4.Error和Exception的区别 Error 是系统级错误 Exception是 5.RuntimeException和CheckedException的区别 RuntimeException 是运行时异常 :是逻辑上的错误,不会编译报错 6.简述java中的异常处理机制 7.final、finally、finalize的区别 final是不可改变的, throw 和 throws 的区别? throw是声明在方法中 后面放的是异常类的实例, throws是声明在方法的后面,后面放异常类名, throw只能声明一个异常 throws可以声明多个异常 throw 关键字,用于对外主动抛出一个异常 通常以下两种情况: 1.当程序遇到一个满足语法,但是不满足业务要求的代码时,可以抛出 一个异常告知调用者 2.程序执行遇到一个异常,但是该异常不应当在当前代码片段被解决时 可以抛出给调出者. 进程与线程 运行在操作系统上的每个线程都是一个进程,一个进程可以包含多个线程, 而且至少包含一个线程.线程不能独立运行,必须依附于进程执行. 并发与并行: 并发是值同一个处理器处理多个任务,并行是指多个处理器或者多核 处理器同时处理多个不同的任务,并发是逻辑上的同时运行,而且并行 是物理上的同时发生. 创建线程的方式有几种?区别是什么? 第一种创建线程的方式: 定义一个类继承自Thread,并重写run方法,在run方法中定义要与其他 线程并发运行的任务. 启动线程时要使用start()方法; 第二种创建线程的方式 实际Runnable接口单独定义线程任务 第三种创建方式 实现Callable接口,再通过future类间接实现Callable重写call方法定义线程要执行的任务. 第一种创建线程的方式优点在于结构件简单,便于匿名内部类形式创建. 第二种创建线程的方式有点在于接口可以多实现,灵活性更好,而且线程与进程任务分离,复用性更高 Callable接口和Future接口,通过使用它们可以任务执行完毕后得到执行 结果,并且可以抛出异常. 1.简述线程池的工作原理及其作用 创建线程池:是用于创建和管理线程 工作时:线程池中线程在没有任务时是等待状态,可以批量循环执行线程任务. 关闭线程:分别是 shutdown()和shutdownNow二者区别在于shutdown() 不会立即终止线程,等待线程队列完成后在结束. shutdownNot()会立即终止线程,并尝试打断正在执行线程的任务, 并清空任务缓冲队列,返回没有执行的线程任务, 2.什么是守护线程?它与普通线程有什么区别? 守护线程也叫后台线程,是普通线程调用 setDaemon()方法设置的, 创建的是一样的. 进程结束不同,当非守护线程都结束时,会结束所有运行的守护线程. 3.synchronized关键字的用法 1.synchronized 修饰普通方法 为线程锁,方法为同步方法, 将并发操作同一临界资源过程改为同步执行可以解决并发安全问题 2.synchronized 修饰非静态代码块时,为同步块, 语法 synchronized(同步监视对象){代码块}可用this代指本类 3.当synchronized修饰静态代码方法上时 同步监视器指的是当前类的对象,可以是类名.Class表示 也可以放在静态方法里. 4.线程同步和异步的区别 同步:是多个线程执行过程存在先后顺序 异步:多个线程各干各的. 5.简述线程的生命周期 1.新生状态:创建线程 使用new Thread() 2.就绪状态:调用start()方法 3.运行状态:当系统分配时间片时进入 4:阻塞状态:调用sleep()/join()也可以使用wait进入等待阻塞解除后进入Runnable运行状态 5.死亡状态:系统结束运行 6.sleep和wait的区别? --自己上网查 sleep是线程类Thread静态的方法 调用方法会让线程进入休眠状态,休眠结束才会今入就绪状态 wait 是Object类的方法,当线程调用wait()方法会会进入一个等待池,进入等待状态, 而且还会释放对象,可以让其他线程可以访问,结束等待可以调用notify()或者notifyAll() 唤醒线程 sleep()和wait的区别是 调用sleep方法线程不会释放对象锁.调用wait方法线程会释放对象锁