答题技巧
-
先答是什么,再答有什么作用和需要注意什么
java基础
1.JDK与JRE的区别
-
JDK java开发工具包
-
JRE java运行环境
JDK包含了JRE,同时包含了编译java源码的编译器javac
2.java的八大基本类型
逻辑型:boolean
整型:byte,short,int,long
字符型:char
浮点型:float,duble
3.java的特点
简单,面向对象,与平台无关,多线程,安全,动态
4.java的三大特征:
-
封装 implements
只提供接口interface,将具体实现功能过程封装在方法中,即类实现接口只是暴露接口,称为封装
-
继承 extends
将子类继承所有父类的通用的属性和方法
-
多态
一个事物具有多种属性,例如:西红柿即使水果也是蔬菜
5.运算符
单目运算符
-
自增、自减运算符
++,--
++x是先执行x=x+1,在使用x的值
x++是先使用x的值,在执行x=x+1
-
逻辑运算符
!逻辑非运算, 结果是Boolean型
二目运算符
-
算数运算符
加法+,减法-,优先级为4级
乘法*,除法/,求余%,结合方式从左到右,优先级为3级
-
关系运算符
关系运算符的结果是Boolean型
小于 <,大于 >,小于等于<=,大于等于>=,不等于 !=,等于==
算数运算符的优先级高于关系运算符
-
逻辑运算符
逻辑与 &&,逻辑或|| 结果是Boolean型
-
赋值运算符
=,赋值运算符左面的操作元必须是变量
赋值运算符的优先级为14级,,结合方向是从右向左
三目运算符
a? b: c如果a对的话则b,反之则c
位运算符
-
"按位与"运算符 二目运算符
运算法则是
6.重载与重写的区别
(Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?)
-
重写是Override,表示子类中的方法可以与父类中的某个方法名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于将父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现
子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题,子类方法的访问权限只能比父类的更大不能更小。如果父类的方法是private类型那么子类则不能存在覆盖的限制,相当于子类中增加了一个全新的方法
-
重载是Overload,表示同一个类中可以有多个名称相同的方法,但是方法的参数列表各不相同(即参数个数或者类型不同)
7.int和integer的区别
java提供两种不同类型:引用类型和原始类型(或内置类型)。
int是java的原始数据类型,integer是java为int提供的封装类。
8.String和StringBuffer的区别
String | StringBuffer | StringBuilder |
---|---|---|
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 | StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 | 可变类,速度更快 |
不可变 | 可变 | 可变 |
线程安全 | 线程不安全 | |
多线程操作字符串 | 单线程操作字符串 |
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据,
-
String类提供了数值不可改变的字符串,
因此每次对String的操作都会生成新的String对象,然后将指针指向新的String对象
缺点:效率低下,浪费了大量的内存
如果经常改变内容的字符串最好不要用String,因为内次生成对象都会对系统的性能产生影响,特别是当内存中无引用对象多了以后,JVM的GC就会开始工作,速度是一定会很慢的。
-
当对字符串进行修改的时候,特别是字符串对象经常改变的情况下,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
-
StringBuilder(线程不安全)是在java5中被提出的,他和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)。
-
StringBuffer(线程安全)的对象可以被多次修改,且,可以用来动态构造字符数据
-
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下使用StringBuilder类。而在应用程序要求线程安全的情况下必须使用Stringbuffer类。
三者的继承关系
JAVA中的线程安全与非线程安全
转自http://blog.csdn.net/xiao__gui/article/details/8934832
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
.list和Set的区别