JAVA面试题-基础

简单理解面向对象

面向 对象 (Object Oriented)是 软件开发方法 ,一种编程范式 对应的还有 面向过程,面向函数
是对现实世界的抽象和模型化
用代码做现实世界的对照

1
2
3
4
5
6
7
⾯向过程 :⾯向过程性能⽐⾯向对象⾼。 因为类调⽤时需要实例化,开销⼤,比较消
耗资源,所以当性能是最重要的考量因素的时候,⽐如单⽚机、嵌⼊式开发、Linux/Unix 等
⼀般采⽤⾯向过程开发。但是,⾯向过程没有⾯向对象易维护、易复⽤、易扩展。

⾯向对象 :⾯向对象易维护、易复⽤、易扩展。 因为⾯向对象有封装、继承、多态性的特
性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,⾯向对象性能
⽐⾯向过程低。

JAVA语言有哪些优点,那些缺点

优点
支持多线程,垃圾自动回收,面向对象,跨平台

缺点
面向对象,运行速度慢,容易被反编译,启动时间慢,属于高级语言不支持底层操作

JDK与JRE

JDK 开发环境,包含编译器,JRE的所有功能
JRE 运行环境,包含JVM,JAVA类库

JVM

JVM是用来运行JAVA编译之后的字节码

重写与重载

重写 是覆盖原有方法
重载是同名不同个数或类型的入参

String StringBuffer 和 StringBuilder 的区别是什么?

StringBuffer 对方法加了同步锁,线程安全
StringBuilder 未加锁,现成不安全

String 为什么是不可变的?

因为在string 中 存储数据的句柄用了 final 修饰,成员变量值不可改变
String s=”1”;s=”2”; 中创建了两个对象

== 与 equals(重要)

== 比较相等,判断两个对象是不是同一个对象,基本类型比较的是值,引用类型比较的是内存地址
默认情况下 equals()等价与==

hasCode

又称散列码 ,对数据进行摘要,提取指纹,具有 以下特性
对相同数据运算,结果相同
对不同数据运算,结果长度相同
运算单向不可逆

(重点) JAVA的方法参数只有值传递

形参只是实参的一个copy

如果形参的实际引用变了,实参不变
如果形参的成员变量变了,实参跟着改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Main {
public static class AAA{
public String a;
AAA(){

}
}
public static void main(String[] args) {
System.out.println("Hello, World");
AAA aa=new AAA();
aa.a="1";
System.out.println(aa);
System.out.println(aa.a);
test(aa);
System.out.println(aa.a);

}

public static void test(AAA a){
a=new AAA();
a.a="2";
System.out.println(a);
}
}

------
输出结果
Hello, World
Main$AAA@6ff3c5b5
1
Main$AAA@3764951d
1

简述线程、程序、进程的基本概念。以及他们之间关系是什么?

系统运行程序到停止就是一个进程创建到消亡的过程,而线程则是进程的更小单位