Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说java基础知识点整理大全「建议收藏」,希望能够帮助你!!!。
1)==用于基本数据类型的比较,在引用数据类型上面使用的时候比较的是地址值
例:
下面程序的运行结果是()
String str1 = “hello”;
String str2 = “he” + new String(“llo”);
System.err.println(str1 == str2);
A hello B he C true D false
答案:false 解析:因为str2中的llo是新申请的内存块,而==判断的是对象的地址而非值,所以不一样。如果是String str2 = str1,那么就是true了。
1)普通类的方法名字其实是可以与类名一致的,和构造函数唯一的区别就是构造函数没有返回值类型,而普通方法有返回值类型
例:
下列说法正确的有()
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D.一个class只能定义一个constructor
答案:C 解析:这里可能会有误区,其实普通的类方法是可以和类名同名的,
和构造方法唯一的区分就是,构造方法没有返回值
2)参数传递与修改
不管是对象、基本类型还是对象数组、基本类型数组,在函数中都不能改变其实际地址但能改变其中的内容
例:
下列程序的运行结果是:
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
A、 good and abc
B、 good and gbc
C、 test ok and abc
D、 test ok and gbc
1)关于switch语句:
case语句后面如果没有break,那么就会一直往下执行。
例:
下面的方法,当输入为2的时候返回值 public static igetValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A 0 B 2 C 4 D 10
答案:D 解析:注意这里case后面没有加break,所以从case 2开始一直往下运行。
Thread类中start()方法和run()方法的使用区别:
start()是用来启动一个线程,当调用了start方法之后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()方法其实就和普通方法一样,按照顺序执行,不会单独开辟一个线程,从而失去了线程的特性了。因此在启动一个线程的时候一定要使用start()而不是run()。
例:
下面程序的运行结果:()
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}
A pingpong B pongping C pingpong和pongping都有可能 D 都不输出
答案:B 解析:这里考的是Thread类中start()和run()方法的区别了。start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样的,已经失去线程的特性了。
1)关于接口和接口中的修饰符
例:
Java接口的修饰符可以为()
A private B protected C final D abstract
答案:cd
1)ArrayList扩充问题
ArrayList默认的长度为10个,但是如果在声明的时候指定了长度的话,就会一次性创建指定长度,而不需要扩充。
例:
ArrayList list = new ArrayList(20);中的list扩充几次()
A 0 B 1 C 2 D 3
答案:A 解析:这里有点迷惑人,大家都知道默认ArrayList的长度是10个,所以如果你要往list里添加20个元素肯定要扩充一次(扩充为原来的1.5倍),但是这里显示指明了需要多少空间,所以就一次性为你分配这么多空间,也就是不需要扩充了
1)异常try……catch语句块的执行顺序
当有多个catch语句的时候,从最前面的catch语句块依次进行异常类型的匹配,仅仅匹配一个,当按顺序来从上到下匹配到一个之后,后续的匹配都不会再执行了;如果父类异常在子类异常的前面的时候,首先匹配的就是父类异常,子类异常是不会得到匹配并执行的。所以在写代码的时候,父类异常Exception一般都放在catch语句块的最后一个。
例:
getCustomerInfo()方法如下,try中可以捕获三种类型的异常,如果在该方法运行中产生了一个IOException,将会输出什么结果()
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
A IOException!
B IOException!Exception!
C FileNotFoundException!IOException!
D FileNotFoundException!IOException!Exception!
答案:A 解析:考察多个catch语句块的执行顺序。当用多个catch语句时,catch语句块在次序上有先后之分。从最前面的catch语句块依次先后进行异常类型匹配,这样如果父异常在子异常类之前,那么首先匹配的将是父异常类,子异常类将不会获得匹配的机会,也即子异常类型所在的catch语句块将是不可到达的语句。所以,一般将父类异常类即Exception老大放在catch语句块的最后一个。
2)编译时异常:变量没有初始化的时候不能够输出。
Java中所有定义的基本类型或对象都必须初始化才能输出值,否则会发生编译时异常。
例:
下面代码的运行结果为:()
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
String s;
System.out.println("s=" + s);
}
}
A 代码得到编译,并输出“s=”
B 代码得到编译,并输出“s=null”
C 由于String s没有初始化,代码不能编译通过
D 代码得到编译,但捕获到 NullPointException异常
答案:C