1.java平台体系的划分?
答:标准版(JAVASE,stantard edition)主要应用场景:主要用于桌面应用软件的编程。
企业版(JAVAEE,enterprise edition)主要应用场景:主要用于分布式的网络程序开发,比如电子商务网站和ERP系统,简化企业解决方案的开发。
Micro版(JAVA ME,micro edition)主要应用场景:主要用于嵌入式系统和移动设备的开发。
2.Jdk环境变量的配置
答:
3.java标识符?
答:用作给变量、类和方法命名。注意:表示类名的标识符用大写字母开始。如:Man, GoodMan
表示方法和变量的标识符用小写字母开始,后面的描述性词以大写开始。eat(),eatFood()
4.java的数据类型怎么划分,分别是什么?
答:分为基本数据类型和引用数据类型。基本数据类型中又分为数值型(byte、short、long、int、float、double)、字符型(char)、布尔型(boolean);引用数据类型分为数组、接口和类。
5.常量怎么划分?
答:文字常量:在程序中直接给出量值的量。”abc”
符号常量:使用final修饰的变量
6.局部变量怎么定义?
答:局部变量 只能在当前函数中使用
7.数据类型转换?
答:1.自动转换:小转大可以自动转换如:int i=1 float d=i;
2.强制转换: 大转小如:int i; double d=4.4; i=(int)d;如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值;对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。
3. boolean类型不可以转换成其他基本类型,但是可以使用if判断来赋值
8.算术运算符有哪些?
答:+ - * / % ++ --
9.关系运算符有哪些?
答:== != >= <= > <
10.逻辑运算符有哪些?
答:& && | || ! ^
11.选择结构有哪几种?
答:switch-case, if-else
12.循环结构有哪几种?
答:while循环、do while循环、for循环、嵌套循环。
13.break、continue、return关键字的作用?
答:break:用于完全结束一个循环,而不是等到条件为false时才退出循环。
continue:忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环。
return:用于结束一个方法,当方法执行到return语句时,这个方法将被结束。
14.什么是数组?数组基本要素有哪些?怎么定义数组?定义有哪两种方式?
答:数组:由若干同类型的数据组成的集合。
定义数组:
动态定义1.数组类型[] 数组名=new 数组类型[数组长度];
静态定义2.数组类型[] 数组名=new 数组类型[]{数组0,数组1,数组2,...};
15.Arrays类使用?
答:List list = new ArrayList();
16.类和对象的概念?类中有什么?
答:类:一组相同或者相似性质的对象的抽象
对象:类的具体化,类的实例化
17.对象的创建方式和使用?
答: 1:实名创建
数据类型 引用变量=new 数据类型();
2:匿名创建
new 数据类型();
18.变量和方法的划分?
答:
19.方法传参的方式?
答:值传递、引用传递。
20.访问修饰符有哪些?
答:public protected private 默认修饰符
21.构造方法的作用?特点?
答:作用:创建对象的同时调用的方法,常用于初始化值
特点:方法名和类名相同;
没有返回值(也没用void);
构造方法可以带参数;
构造方法可以重载。
22.this关键字的作用?
答:this总是指向调用当前方法的对象。
this代表当前类中隐藏的对象,它总是指向当前正在调用方法的对象
23.单例设计模式(Singleton)特点是什么?
答:无论访问该类多少次,只能得到该类的唯一实例。
24.方法的重载是什么?.
答:在同一个类中,方法名相同,参数的个数或类型不同,与返回值类型无关。
25.面向对象的三大特征---封装?
答:指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接
访问,而是通过该对象所提供的方法进行操作访问
26.面向对象的三大特征---继承?关键字?继承的作用?
答:继承:在Java中使用extends关键字让一个类继承另外一个类,被继承的类叫超类,基类,父类,继承父类的类叫子类或者派生类
关键字:extends
作用:1.提高了代码的复用性 2.减少了模块间的接口,提高了代码的易维护性。
27.super关键字?作用?
答:定义:用于限定该对象调用它从父类继承得到的实例变量或方法。
作用:在子类方法中调用父类被覆盖或隐藏的实例方法或变量
28.方法的重写?(面试官常问与方法重载的区别)
答:发生在继承期间,子类拥有与父类相同的方法名,相同的参数列表,访问权限不能缩小于父类权限,返回值类型与父类一致或者是其子类类型的方法,也被称之为方法覆盖。
方法重写和方法重载的区别:
答:区别:1重载是发生在同一个类中,重写(override)是发生在继承期间;
2重载时候参数个数或者类型必须不同,重写时候参数列表必须相同;
3重载时候与返回值无关,重写时候返回值类型必须与父类或其子类一致。
29.构造方法能否被继承?
答:不能
30.方法和属性能否被继承?
答:能
31.初始化块?
答:初始化块:类中的第四种成员
划分为:1.静态初始化块:属于类本身,与对象无关,在类被加载运行期间执行,多个静态初始化块按照定义顺序执行
2.非静态初始化块:属于具体某个对象,在实例化对象的同时调用构造方法之前被执行。
32.final关键字?
答:可以用来修饰类,方法,对象,变量
final类:最终类,该类不可被继承
final方法:最终方法,该方法不可被重写
final对象:引用变量无法指向别的对象
final变量:符号常量,
33.什么是多态?实现多态的机制?多态的表现形式?
答:多态:同一种引用类型使用不同的实例执行不同的操作
实现机制:向上转型和向下转型
表现形式:方法重载和方法重写
34.向上转型和向下转型
答:向上转型:父类引用指向子类对象
向下转型:先向上转型,然后将父类引用转换为子类类型
35.instanceof关键字
答:为了避免向下转型出现的错误。即在进行强制类型转换之前,首先先用instance判断前一个对象是否是后一个类的实例,是否可以成功转换,从而保证代码更加强壮。
36.抽象类:如果一个类中没有包含足够的信息来描绘一个具体的对象,这就是抽象类
37.抽象类的定义?
答:定义:如果一个类中没有足够的信息来描述一个对象,那么该类就可以定义成一个抽象类了
38.普通类和抽象类区别?
答:1.语法上抽象类必须得有abstract修饰,普通类没有。
2.抽象类可以定义抽象方法,普通类不可以。
3.普通类可以实例化,而抽象类不能实例化
39.普通方法和抽象方法的区别?
答:
40.什么是接口?定义接口的关键字?实现接口的关键字?如何实现多个接口?接口能否继承接口?
答:接口:一种特殊的抽象类;关键字:interface;
如何实现多个接口:publicclass 类名 implement 接口名,接口名,…{}
接口可以继承接口
41.接口的特点?
答:1接口中只能定义静态常量、抽象方法、默认方法,不能定义成员变量、普通方法、构造器以及初始化块。
2接口不能实例化,因次接口需要被继承
3实现一个接口就必须重写接口中所有的抽象方法,而默认方法还可以有选择的重写
4接口可以实现多态5接口也可以继承接口
42.简单工厂模式?
43.接口和抽象类的区别?
答:1.抽象类体现的是继承,而接口类是一种特殊的抽象类,更多的体现的是一种规范。
2.接口中只能定义静态常量,抽象方法,默认方法和静态方法,不能定义成员变量、普通方法、构造器以及初始化块。而抽象类中可以定义成员变量,成员方法,构造器,初始化块。
3.接口中方法都必须公开,而抽象类中可以定义私有的。
4.语法上有抽象类必须有abstract来修饰,而接口必须有interface。
44.字符串处理类有哪些?
答:String Buffer、String Builder、
45.String类提取字符串的方法是什么?
答:substring()
46.String类比较字符串内容的方法是什么?
答:equals() ;
47.String类替换字符串内容的方法是什么?
答:replace()
48.StringBuffer追加字符串的方法是什么?
答:append()
49.java里如何获取系统日期时间?
答:SimpleDateFormat()
50.java里取随机数的方式?
答:ath.random();
51、常用集合接口都有哪些?
答:List Set Map Iterator
52、List接口有哪些实现类?
答:ArrayList、LinkedList、Vector
53、Set接口有哪些实现类?
答:HashSet、TreeSet
54、List接口和Set接口的区别是什么?
答:List:元素有放入顺序,元素可重复,
Set特点:元素无放入顺序,元素不可重复
55、ArrayList和LinkedList的区别?
答:ArrayList:底层实现为数组,适合元素的随机访问(查询效率较高),默认长度为10,扩容后容量是原来的1.5倍
Linklist:采用链表存储方式,插入,删除元素时效率比较高
56、ArrayList和Vector的区别?
答:1Vector属于线程安全的集合类,而ArrayList是线程不安全的。
2Vector扩容后是原来的2倍,而ArrayList扩容后是原来的1.5倍。
57、Iterator 是什么?
答:Iterator接口是java集合框架的成员,前面学习的Collection等集合主要负责盛装对象,而java中则专门提供Iterator用于遍历集合中的对象,故也称为迭代器。58、HashSet和TreeSet类的区别?
59、List和Map的区别?
答:List特点:元素有序,允许元素重复出现
Map:一种以键值对存储数值的集合,其中key(键)无序,不能重复,并且可以通过key找到唯一对应的value(值)。
60、Map的常用实现类有哪些?
答:HashMap、HashTable
61、HashMap与Hashtable的区别?
答:区别在于:1Hashtable线程安全;HashMap线程不安全。
2HashMap可以使用null来写key和value,而Hashtable不可以。如果把null值放进hashtable中,将会引发NullPointException异常
62、Collection与Collections的区别?
答:Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作
Collections是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
63、为什么使用泛型?使用泛型有什么好处?
答:why:在使用范型时.就规定了只有某种类型的数据才能放进集合里.你在集合中取数据时就不用进行强制转换.这样就提高了程序的性能
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
64、Java中异常的分类?
答:最顶层的异常父类(Throwable),它包括Error(底层错误)和Exception两个子类。Exception又分为RuntimeException和非RuntimeException两个子类。
65、Java的异常处理是通过哪几个关键字来实现的?分别代表什么?
答:try :放的是有可能产生异常的代码
catch:用来接收Java虚拟机抛出的异常对象,然后在代码中进行处理
finally:不论代码是否产生异常,其代码块中的代码会被“强制”执行
throws:是方法声明的一部分,是紧跟在参数列表之后的,其作用是告诉客户端程序员使用此方法可能会抛出的异常,也就是异常说明
throw:作用在方法体内 是用于抛出一个异常对象
66、什么时候需要捕获异常?
答:使用throws声明的非运行时异常需要在调用时捕获
67、如何实现自定义异常?
答:步骤1.创建自定义异常类继承Exception,编写构造方法,继承父类的实现
步骤2.在类中使用异常,即使用throw抛出实例化自定义异常对象
步骤3.在程序中捕获异常
68、File是否属于流?作用是什么?
答:不属于;作用:以抽象的方式代表磁盘上的文件和目录,通过该对象可以在磁盘中创建、查找、删除文件和目录。
69、Java中有几种类型的流?
答:按方向划分为:输入流input和输出流output。
按照数据处理的单位划分为:字节流和字符流。称:字节输入、字节输出流,字符输入、字符输出流
按照功能角色划分为:节点流(必须嫁接在一个物理文件上,最里边的一层流)和处理流(最外面的一层流,不能嫁接在物理文件上,必须套在流上)
70、字节流和字符流的区别是什么?顶层抽象类是什么?他们分别有哪些常用的子类?
答:字节流是以字节为单位读取数据,字符流是以字符为单位读取数据;字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先;Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
71、字节流的缓冲流是哪几个?字符流的缓冲流是哪几个?
答:字节流的:BufferedInputStream BufferedOutputStream
字符流的:BufferedReader BufferedWriter
72、Java中的转换流的作用是什么?
答:将字节流转换为字符流
73、Java中的打印流有哪些?
答:字节打印流(PrintStream) 和字符打印流(PrintWriter)
74、Java中实现序列化有哪几种方式?如何自定义序列化?
答:
75、网络编程中ServerSocket与Socket的工作原理是什么?
答:Socket本身是基于TCP/IP协议的,而TCP/IP协议需要区分两台或多台机器其中一台机器是客户端,另一台机器必须是服务端,客户端之间通过Socket和ServerSocket建立连接后,客户端利用输出流将信息托付给Socket,该Socket则通过底层的硬件(如网卡驱动程序)利用网络传输给另一台机器(服务端)的Socket,服务端则通过输入六从Socket中读取信息显示或使用;反之一样。
76、Java中如何实现多线程的?
答:1. 继承Thread类实现多线程 2. 实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extendsThread,此时,必须实现一个Runnable接口
77、你是怎样理解线程的?
答:是在一个进程内部的“可以并发执行的多个函数”,一个进程中可有多个线程。即线程生活在进程内部,他们共享进程空间,线程是由操作系统来维护的。通常所说的机器上的进程执行了其实指的是进程中的主线程开始执行了,main方法开始执行了,所以说在机器上运行的其实都是线程
78、Java中启动一个线程用start方法还是run方法?他们有什么区别?
答:start():通过该方法启动线程的同时也创建了一个线程,真正实现了多线程,这时无需等待run()方法中的代码执行完毕就可以直接执行下面的代码,通过start创建的线程处于可运行状态,当得到CPU时间片后就会执行其中的run方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
run():通过run方法启动线程其实就是调用一个类中的方法,并没有创建一个线程,程序中还是只有主线程,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。
79、线程的基本状态以及状态之间的关系?
答:新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Dead)。
80、sleep()、yield() 、wait()方法的区别?
答:sleep属于Thread类,而wait属于Object类。
sleep()睡眠时,保持对象锁,仍然占有该锁;而wait()睡眠时,释放对象锁。
yield()方法和sleep()方法类似,也不会释放“锁标志”,区别在于,它没有参数,即yield()方法只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行,另外yield()方法只能使同优先级或者高优先级的线程得到执行机会,这也和sleep()方法不同。
81、Java中如何实现线程同步的?
答:1:Synchronized
2: lock 方法
82、notify () 的作用是什么?
答:唤醒由于使用这个同步方而处于等待线程的某一个结束等待
83、Java多线程释放锁的几种方式
答:1:同步方法或者同步代码块执行结束
2:同步监视器调用了wait()方法
3:同步方法或者同步代码块在执行过程中发生了异常而跳出的时候