架构社区SSM社区

【面试】Java面试-基础核心一

2021-04-01  本文已影响0人  慕凌峰

一、java中方法间的值传递相关

1、常量值传递

public static void main(String[] args) {
    int num1 = 10;
    int num2 = 20;

    swap(num1, num2);

    System.out.println("num1 = " + num1);
    System.out.println("num2 = " + num2);
}

public static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;

    System.out.println("a = " + a);
    System.out.println("b = " + b);
}
a = 20
b = 10
num1 = 10
num2 = 20

2、数据传递

public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4, 5 };
    System.out.println(arr[0]);
    change(arr);
    System.out.println(arr[0]);
}

public static void change(int[] array) {
    // 将数组的第一个元素变为0
    array[0] = 0;
}
1
0

3、对象传递,并修改对象属性值

public static void main(String[] args) {
    Student student = new Student("小张");
    System.out.println(student.getName());
    changgeName(student);
    System.out.println(student.getName());
}

public static void changgeName(Student student) {
    student.setName("小五");
}
小张
小五

4、对象传递,让对象参数引用一个新的对象(结果:不可修改)

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Student s1 = new Student("小张");
    Student s2 = new Student("小李");
    Test.swap(s1, s2);
    System.out.println("s1:" + s1.getName());
    System.out.println("s2:" + s2.getName());
}

public static void swap(Student x, Student y) {
    Student temp = x;
    x = y;
    y = temp;
    System.out.println("x:" + x.getName());
    System.out.println("y:" + y.getName());
}
x:小李
y:小张
s1:小张
s2:小李

总结


二、构造器

1、不可别重写

2、在 Java 无参构造器的作用

Java 程序在执行子类的构造方法之前,如果没有用 super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super()来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。

3、构造器的作用

4、构造器的特性

public Student() {

}

public Student(String name) {
    this.name = name;
}

三、成员变量与局部变量的区别

1、区别


四、对象

1、创建与存储

2、对象的比较


五、面向对象三大特征

1、封装

2、继承

不同类型的对象,相互之间经常有一定数量的共同点,同时,每一个对象还定义了额外的特性使得他们与众不同

3、多态

一个对象具有多种的状态。具体表现为父类的引用指向子类的实例。特点如下:


六、静态方法

public class Student {

    public static String name() {
        return "同学";
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(s1.name());
        System.out.println(Student.name());
    }
}
同学
同学

七、String、StringBuffer、StringBuilder

1、是否可变

String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以String 对象是不可变的。

StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。

在 Java 9 之后,String 、StringBuilder 与 StringBuffer 的实现改用 byte 数组存储字符串 private final byte[] value

2、线程安全

AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。

3、性能

4、replace、replaceAll注意事项

<replace、replaceAll方法执行后必须要有String对象去接,因为String实质上是final类型,所以直接使用name.replaceAll("\r|\n", "")时,并不会修改name自身的值信息,而是生成一个新的String

public static void main(String[] args) {
    String name = "412201207017303龙井市\r智新镇卫生院\n折腾";

    System.out.println(name);

    // name.replaceAll("\r|\n", ""); 如果只是这样写,不生效
    name = name.replaceAll("\r|\n", "");

    System.out.println(name);
}

八、try-catch-finally

1、基本作用

public class Test {
    public static int f(int value) {
        try {
            return value * value;
        } finally {
            if (value == 2) {
                return 0;
            }
        }
    }
}

如果调用 f(2),返回值将是 0,因为 finally 语句的返回值覆盖了 try 语句块的返回值

2、finally 块不会被执行

其他情况下都会执行finally中的信息

上一篇下一篇

猜你喜欢

热点阅读