Java基础知识
基本概念
1. Java语言的优点
- Java语言是纯面向对象的语言
- 平台无关性
- Java提供了很多内置类库
- 提供了对web应用开发的支持
- 具有较好的安全性和健壮性
- 去除了C++语言中难以理解,容易混淆的特性,使程序更加严谨,简洁
2. Java与c/c++有什么异同
- Java与C++都是面向对象的语言,都使用了面向对象的思想(封装、继承、多态)
- Java为解释性语言
- Java为纯面向对象的语言,所有代码(包括函数、变量等)必须在类中实现,除了基本类型(包括int、float等)外,所有类型都是类。
- ···
3. 为什么需要public static void main(String[] args)这个方法
main是JVM识别的特殊方法名,是程序的入口方法,程序开始执行时,没有实例化的对象,所以main()方法需要被定义成public和static才能执行。
4. Java程序的初始化的顺序是怎么样的
Java程序初始化的原则:
- 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能初始化多次
- 父类优先于子类进行初始化
- 按照成员变量的定义顺序进行初始化
Java程序的代码块顺序
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类非静态变量
- 父类非静态代码块
- 父类构造函数
- 子类非静态变量
- 子类非静态代码块
- 子类构造函数
初始化程序示例
/**
* 创建时间 2021/7/29 11:20
* 初始化顺序
* @author Ye
* @version 1.0
*/
class Base {
static {
System.out.println("Base static block");
}
{
System.out.println("Base block");
}
public Base(){
System.out.println("Base constructor");
}
}
public class Derived extends Base{
static {
System.out.println("Derived static block");
}
{
System.out.println("Derived block");
}
public Derived(){
System.out.println("Derived constructor");
}
public static void main(String[] args) {
new Derived();
}
}
运行结果
5. Java中的作用域
Java中,变量的类型主要有3种:成员变量、静态变量和局部变量。类的成员变量的作用范围与类的实例化对象的作用范围相同。static修饰的成员变量称为静态变量或者全局变量,静态变量不依赖于特定实例,被所有实例共享。局部变量的作用域与可见性在它的花括号内。
成员变量的4种作用域
作用域 与可见性 | 当前类 | 同一package | 子类 | 其他package |
---|---|---|---|---|
public | 1 | 1 | 1 | 1 |
private | 1 | 0 | 0 | 0 |
protected | 1 | 1 | 1 | 0 |
default | 1 | 1 | 0 | 0 |
6. 一个Java文件中是否可以定义多个类
一个Java文件中可以定义多个类,但是最多只能有一个类被public修饰,并且这个类的类名与文件名必须相同。
7. 什么构造函数
构造函数是一种特殊的函数,用来在对象实例化初始化对象的成员变量。在Java语言中,构造函数的特点如下:
- 构造函数必须与类的名字相同,并且不能有返回值(返回值也不能为void)
- 每个类可以有多个构造函数
- 构造函数可以有0个,1个或者1个以上的参数
- 构造函数总是伴随着new操作一起调用,且不能由程序的编写者直接调用,必须由系统调用
- 构造函数主要作用是完成对象的初始化工作
- 构造函数不能被继承
- 当父类没有提供无参构造函数时,子类构造函数必须通过super显式的调用父类的构造函数
8. 为什么Java中有些接口没有任何方法
由于Java不支持多重继承,经常采用实现多个接口来间接达到多重继承的目的。在Java语言中,有些接口没有任何方法,这些没有方法的接口又被叫标识接口,标识接口对它的类没有任何语义要求,它仅仅充当一个标识的作用。
9. Java中的clone方法有什么作用
Java中基本数据类型是按值传递,除此之外都是引用传递。在实际的编程中,经常需要创建一个与已经存在的对象具有相同状态的对象,clone的作用就在与此。实现方法:
- 实现Cloneable接口(标识接口)
- 重写Object中的clone()方法
- 在clone方法中调用super.clone()
- 把浅复制的引用指向原型对象新的克隆体
浅复制是指只复制一个对象,但是不复制对象的当前状态
浅复制代码示例:
/**
* 创建时间 2021/7/29 17:30
* clone浅复制
* @author Ye
* @version 1.0
*/
class Copy implements Cloneable{
private int data = 0;
public int getData