1.sleep()和wait()的区别
1、这两个方法来自不同的类分别是Thread和Object
2、最主要是sleep方法没有释放锁,而 wait 方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
2.什么是多态 多态的使用范围
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
3.java中 public/private/protected和default(默认)的区别
public:
具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
protected:
主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西
default:
有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
private:
访问权限仅限于类的内部,是一种封装的体现,例如,大多数成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。
4.String、StringBuffer、StringBuilder有什么区别
一. String 字符串常量
二. StringBuffer 字符串变量(线程安全)
三. StringBuilder 字符串变量(非线程安全)
注意点:
在使用StringBuffer时指定其容量,会比不指定其容量要快40%到50%左右,甚至比不指定容量的StringBuilder要快。所以在使用时最好指定其容量。这是一个良好的编程习惯,对于性能有很大的提升。
5.说出一些常用的类,包,接口,请各举5个
常用的类:
BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:
java.lang java.awt java.io java.util java.sql
常用的接口:
Remote List Map Document NodeList
6.什么是线程同步 如何实现线程同步
当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题。
实现同步机制有两个方法:
1.同步代码块:
synchronized(同一个数据){} 同一个数据:就是N条线程同时访问一个数据。
2.同步方法:
public synchronized 数据返回类型 方法名(){}
就是使用 synchronized 来修饰某个方法,则该方法称为同步方法。对于同步方法而言,无需显示指定同步监视器,同步方法的同步监视器是 this 也就是该对象的本身(这里指的对象本身有点含糊,其实就是调用该同步方法的对象)通过使用同步方法,可非常方便的将某类变成线程安全的类,具有如下特征:
1,该类的对象可以被多个线程安全的访问。
2,每个线程调用该对象的任意方法之后,都将得到正确的结果。
3,每个线程调用该对象的任意方法之后,该对象状态依然保持合理状态。
注:synchronized关键字可以修饰方法,也可以修饰代码块,但不能修饰构造器,属性等。
实现同步机制注意以下几点: 安全性高,性能低,在多线程用。性能高,安全性低,在单线程用。
1,不要对线程安全类的所有方法都进行同步,只对那些会改变共享资源方法的进行同步。
2,如果可变类有两种运行环境,当线程环境和多线程环境则应该为该可变类提供两种版本:线程安全版本和线程不安全版本(没有同步方法和同步块)。在单线程中环境中,使用线程不安全版本以保证性能,在多线程中使用线程安全版本.
7.解释一下static关键字 被static修饰的方法 调用 静态/非静态函数的方法
\1. 静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
声明为static的方法有以下几条限制:
· 它们仅能调用其他的static 方法。
· 它们只能访问static数据。
· 它们不能以任何方式引用this 或super。
\2. 静态变量
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了
\3. static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
8.堆区和栈区的区别
栈区:先进后出 存放局部变量 连续的存储空间
堆区:存放new出来的对象,不连续的存储空间
9.&和&&的区别
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
10.Java支持的数据类型有哪些?什么是自动拆装箱?
Java语言支持的8种基本数据类型是:
byte/short/int/long/float/double/boolean/char
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成Double,等等。反之就是自动拆箱。