java基础知识点整理大全「建议收藏」

Java (70) 2023-03-27 08:47

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说java基础知识点整理大全「建议收藏」,希望能够帮助你!!!。
java基础知识点整理大全「建议收藏」_https://bianchenghao6.com/blog_Java_第1张

数据类型

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


switch语句

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)关于接口和接口中的修饰符

  1. 接口中的成员常量和方法都必须是public类型的。因为接口用于描述系统对外提供的所有服务,要确保外部使用者能够访问它们。
  2. 接口中的方法都是抽象类型abstract的。因为接口仅仅描述系统能够做什么,但是不指明如何去做,为此接口中的方法都是抽象类型的。
  3. 接口中的变量类型只有final,static类型。因为接口中的变量是所有实现类所共有的,既然共有,就是不变的东西,所以变量是不可变的final类型,也就是常量了;接口不涉及和任何具体实例相关的细节,通俗的话讲就是接口不能够被new,因此接口没有构造方法,不能够被实例化,没有实例变量,只有静态static变量。
  4. 接口中不能够出现变量,如果有变量出现,就和接口提供的统一抽象的这种思想相抵触了。所以接口中的属性必然是一个常量,只能够读不能够被修改,这样才能为实现接口的对象提供一个统一的属性。通俗的讲,如果有认为是要变化的东西,就放到实现接口的类中去实现,而不应该放到接口中去,接口只是对一类事物的属性和行为更高层次的抽象。
  5. 综上:接口的方法默认是public abstract,接口的属性默认是public static final常量,且必须赋值。

例:
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

发表回复