Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
1、Java面向对象的特征
抽象(Abstract):指对同一个目标(对象)的共同属性(特征)和方法(功能、行为)进行抽取、归纳和总结。抽象的意义是选择公共的部分,忽略一个主题中与当前目标无关的方面。
封装(Encapsulation):指隐藏对象的属性和实现等细节,控制成员属性的访问和修改权限,通过特定的公共方法暴露给外部访问。
如下代码,name属性为private权限,外部需要通过对象的getName()方法才能访问。
private String name = "你好,Java";
public String getName() {
return name;
}
继承(Inheritance):指子类继承父类的的成员和方法,使得子类具备父类相同的行为。
注意:Java类之间只能单继承,而接口之间允许多继承。
多态(Polymorphism):指同一个行为具有多个不同的表现形式或形态,如一个类的方法在不同的情况会有不同的表现形式。
比如方法重写:子类可以重写(覆盖)父类的方法,通过父类引用变量调用该方法时,根据实际对象的类型,会调用子类中的方法。
2、JDK与JRE的区别
JDK
JDK全称:Java Development Kit,是整个Java的核心,包含了Java运行环境(JRE)和一系列Java开发工具完整的包。
JRE
JRE全称:Java Runtime Environment,是Java程序的运行环境,包含JVM、Java核心类库等。
区别
1)JDK用于编译开发。
2)JRE用于运行Java程序。
3)JRE是JDK的子集。
JDK与JRE的关系图
3、Java基本数据类型
整型:byte、short、int、long。
浮点型:double、float。
字符型:char。
布尔型:boolean。
4、Java常量和变量的区别
常量:是一个固定的值,赋值后不能被改变。
常量的三种类型:静态常量(在类中)、成员常量(在类中)、局部常量(类方法中)。
变量:是一个不固定的值,赋值后可以随意改变。
5、== 和 equals的区别
==
1)如果是基本数据类型,则比较的是值是否相等。
2)如果是引用数据类型,则比较的是对象的地址是否相等。
equals
equals是Object类提供的方法,接收的是Object参数类型。它是用来比较两个对象是否相等,默认比较的是对象的地址,可以比较包装类型,不能用于比较基本数据类型。
如果要比较两个对象的值是否相等,一般需要重写equals和hashCode方法,Java常用的String、Date、Integer等类都重写了equals和hashCode方法,它们比较的是对象的内容是否相等,而不是比较对象堆内存地址相等。
6、访问修饰符
7、i++ 和 ++i的区别
i++是先取值再自增。
++i是先自增再取值。
public static void main(String[] args) {
int i = 1;
i = i++ + 1;
System.out.println("i: " + i);
int j = 1;
j = ++j + 1;
System.out.println("j: " + j);
}
F:\Tools\Jdk1.8\Jdk\bin\java.exe...
i: 2
j: 3
Process finished with exit code 0
8、& 和 &&的区别
&和&&两者都是运算符,都可以用作逻辑与(and)的运算符,表示逻辑与(and),逻辑判断推荐使用&&,位运算则使用&。
&和&&的共同点:当运算符两边的表达式结果都为 true,整个运算结果才为 true,否则,只要有一方为false,则结果为false。
&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
&可以用作位运算符,当&两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用OxOf来与一个整数进行&运算,来获取该整数的最低4个 bit 位,例如,Ox31 & OxOf 的结果为OxO1。
9、Java值传递
值传递:传递的是基本类型参数值的拷贝,方法对参数的修改不会影响之前参数的值。
引用传递:传递的是该引用对象在堆内存中地址值的拷贝,而不是拷贝整个对象本身,方法对参数的修改会直接影响参数之前的值。
Java只有值传递:
1)对于基本数据类型,传递的是它们的实际值的副本。
2)对于引用类型,传递的是对象引用值的副本,即对象的内存地址,而不是对象本身。
3)值传递是数据的拷贝,而不是数据本身,引用类型的传递虽然可以修改引用对象的内容,但不能修改引用本身(引用类型和内存地址),因此,引用传递是值传递的一种形式。
10、static关键字的作用
static字面意思是静态,它的作用是用来修饰。
1)修饰静态内部类,静态内部类可以不依赖外部类实例对象而被实例化,而内部类需要在外部类实例化后才能被实例化。
2)修饰静态方法,静态方法属于类方法,不需要实例化对象就能调用。
3)修饰静态变量,静态变量属于类,不需要实例化对象就能调用。
4)修饰静态代码块,静态代码块只会在类被加载时执行且执行一次。
第一篇基础面试题到此结束。