Java面试题,
Java面试题,
一、 Java 基础
1.JDK和JRE有什么区别?
JDK就是Java Development Kit ,JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。
2.== 和 equals 的区别是什么?
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
a.比较的是操作符两端的操作数是否是同一个对象。
b.两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。
c.比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:
int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。
equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
3.两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
两个object对象,如果equals()相同,hashcode()一定相同,如果,hashcode()相同,equals()不一定相同。
4. final 在 java 中有什么作用?
Final可以修饰:类,函数,变量
修饰类时:表示最终类,任何类不能再继承它。
修饰函数时:表示该方法是该类中的最终函数,继承他的方法不能去重写它。
修饰变量时:表示该变量是常量或者叫终态变量,一旦初始化后不能再改变变量的值。
5. java 中的 Math.round(-1.5) 等于多少?
-1,
math.round()四舍五入,返回一个最接近的值,如果是0.5,上下距离一样,向正无穷方向取值,其实就是取较大的值。
public void testRound(){
System.out.println(Math.round(12.5)); //13
System.out.println(Math.round(-12.5)); //-12
System.out.println(Math.round(-12.6)); //-13
}
6. String 属于基础的数据类型吗?
不属于。String是一个对象。
8种基本数据类型: boolean byte char shrot int long float double
对应的基本类型包装类:Boolean Byte Character Short Integer Long Float Double
7. java 中操作字符串都有哪些类?它们之间有什么区别?
String、StringBuffer、StringBuilder
区别:String是不可变的对象,对每次对String类型的改变时都会生成一个新的对象,StringBuffer和StringBuilder是可以改变对象的。
对于操作效率:StringBuilder > StringBuffer > String
对于线程安全:StringBuffer 是线程安全,可用于多线程;StringBuilder 是非线程安全,用于单线程
不频繁的字符串操作使用 String。反之,StringBuffer 和 StringBuilder 都优于String
8. String str=“i"与 String str=new String(“i”)一样吗?
不一样
String str =”i”是一个常量,String str = new String(“i”)重新new了一个对象,内存空间不一样。
9.如何将字符串反转?
第一种、
public class Main {
public static void main(String[] args) {
String s1 = “asdfghjkl”;
System.out.println(new Main().swapWords(s1));
}
public void swap(char[] arr, int begin, int end) {
while (begin < end) {
char temp = arr[begin];
arr[begin] = arr[end];
arr[end] = temp;
begin++;
end–;
}
}
public String swapWords(String str) {
char[] arr = str.toCharArray();
swap(arr, 0, arr.length - 1);
int begin = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] == ’ ') {
swap(arr, begin, i - 1);
begin = i + 1;
}
}
return new String(arr);
}
}
第二种、
public class Main {
public static void main(String[] args) {
String s1 = “asdfghjkl”;
String[] s = s1.split(”");
List list = list = Arrays.asList(s);
Collections.reverse(list);
System.out.println(list);
}
}
第三种、
public class Main {
public static void main(String[] args) {
String s1 = “asdfghjkl”;
System.out.println(new StringBuilder(s1).reverse().toString());
}
}
10. String 类的常用方法都有那些?
下面列举了20个常用方法。格式:返回类型 方法名 作用。
1、和长度有关:
int length() 得到一个字符串的字符个数
2、和数组有关:
byte[] getByte() ) 将一个字符串转换成字节数组
char[] toCharArray() 将一个字符串转换成字符数组
String split(String) 将一个字符串按照指定内容劈开
3、和判断有关:
boolean equals() 判断两个字符串的内容是否一样
boolean equalsIsIgnoreCase(String) 忽略太小写的比较两个字符串的内容是否一样
boolean contains(String) 判断一个字符串里面是否包含指定的内容
boolean startsWith(String) 判断一个字符串是否以指定的内容开头
boolean endsWith(String) 判断一个字符串是否以指定的内容结尾
4、和改变内容有关:
String toUpperCase() 将一个字符串全部转换成大写
String toLowerCase() 将一个字符串全部转换成小写
String replace(String,String) 将某个内容全部替换成指定内容
String replaceAll(String,String) 将某个内容全部替换成指定内容,支持正则
String repalceFirst(String,String) 将第一次出现的某个内容替换成指定的内容
String substring(int) 从指定下标开始一直截取到字符串的最后
String substring(int,int) 从下标x截取到下标y-1对应的元素
String trim() 去除一个字符串的前后空格
5、和位置有关:
char charAt(int) 得到指定下标位置对应的字符
int indexOf(String) 得到指定内容第一次出现的下标
int lastIndexOf(String) 得到指定内容最后一次出现的下
- 抽象类必须要有抽象方法吗?
抽象类不一定有抽象(abstrace)方法,有抽象类(abstrace)方法的类一定是抽象类。 - 普通类和抽象类有哪些区别?
a.抽象类不能被实例化。
b.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
c.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
d.含有抽象方法的类必须申明为抽象类
e.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。 - 抽象类能使用 final 修饰吗?
不能
抽象类中的抽象方法是未来继承之后重写方法,而用final修饰的类,无法被继承。 - 接口和抽象类有什么区别?
1.抽象类是被子类继承,接口是被类实现
2.接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量
4.接口是设计的结果 ,抽象类是重构的结果 - java 中 IO 流分为几种?
1.字节输入流(InputStream)
2.字节输出流(OutputStream)
3.字符输入流(Reader)
4.字符输出流(Writer)
相关文章
- 暂无相关文章
用户点评