Java基础知识——1.基本概念

1. Java语言有哪些优点

(1)Java是纯面向对象的语言
(2)平台无关性(一次编译,到处运行,通过JVM实现)
(3)Java提供很多内置的类库
(4)提供了对Web应用开发的支持
(5)具有较好的安全性和健壮性
(6)去除了C++语言中难以理解、容易混淆的特性
Java语言是由C++语言改进并重新设计而来的

2. Java与C/C++有什么异同

相同点:都是面向对象的语言,都使用了面向对象思想(例如封装、继承、多态等),由于面向对象有许多非常好的特性(继承、组合等),因此二者都有很好的可重用性
不同点:
(1)Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由JVM解释执行。而C/C++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码。因此,Java的执行速度比C/C++慢,但是Java能够跨平台执行,而C/C++不行
(2)Java为纯面向对象语言,所有代码必须在类中实现,除了基本数据类型外,所有类型都是类。此外,Java语言中不存在全局变量或全局函数,而C++兼具面向过程和面向过程编译的特点,可以定义全局变量和函数
(3)Java没有指针的概念,有效防止了C/C++语言中操作指针可能引起的系统问题,从而使程序更加安全
(4)与C++相比,Java不支持多重继承,但是Java引入了接口的概念,可以实现多个接口
(5)C++语言中,需要开发人员去管理对内存的分配(包括申请和释放),而Java提供了垃圾回收器(GC)来实现垃圾的自动回收,不需要程序显式地管理内存的分配
Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同

3. 为什么需要public static void main (String[ ] args) 这个方法

该方法为Java程序的入口方法,JVM在运行程序时,会首先查找 main() 方法。
public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明main() 方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问,JVM在启动时就是按照上述方法的签名(必须要有public和static修饰,返回值为void,且方法的参数为字符串数组)来查找方法的入口地址,若能找到,就执行;找不到,则会报错。void表明方法没有返回值,main是JVM识别的它她特殊方法名,是程序的入口方法。字符串数组参数args为开发人员在命令行状态下与程序交互提供的一种手段
main是程序的入口方法,当程序运行时,第一个执行的方法就是main() 方法。通常来讲,要执行一个类的方法,必须先实例化一个类的对象,然后通过对象来调用这个方法。但由于main是程序的入口方法,此时还没有实例化对象,因此在编写main() 方法时就要求不需要实例化对象就能调用这个方法,鉴于此,main() 方法需要被定义为public 和 static

4. 如何实现在main()方法执行前输出

main()方法不是程序运行时第一个被执行的模块。静态块在类被加载时就会被调用,因此可以在main()方法执行前,利用静态块实现输出。

public class Test {
	static{
		System.out.println("Hello, static");
	}
	public static void main(String[] args){
		System.out.println("Hello, main");
	}
}

程序运行结果为:
Hello, static
Hello, main
静态块不管顺序如何,都会在main()方法执行之前执行。

public class Test {
	public static void main(String[] args){
		System.out.println("Hello, main");
	}
	static{
		System.out.println("Hello, static");
	}
}

程序运行结果为:
Hello, static
Hello, main

5. Java程序初始化的顺序是怎样的

在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。
Java程序初始化一般遵循三个原则(优先级依次递减):
①静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次
②父类优先于子类进行初始化
③按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义中,它们依然在任何方法(包括构造函数)被调用之前先初始化。
Java程序初始化工作可以在许多不同的代码块中来完成(例如静态代码块、构造函数等),它们执行的顺序如下:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。

6. Java中的作用域有哪些

在这里插入图片描述

  • public:表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问
  • private:表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或对象都没有访问权限
  • protected:表明成员变量或方法对该类自身,与它在同一个包中的其他类,在其它包中的该类的子类都可见
  • default:表明成员变量或方法只有自己和与其位于同一个包中的类可见
    这些修饰符只能修饰成员变量,不能用来修饰局部变量。private 和 protected 不能用来修饰类(只有public、abstract、final能用来修饰类)

7. 一个Java文件中是否可以定义多个类

一个Java文件可以定义多个类,但只能有一个类被public修饰,并且这个类的类名与文件名必须相同,若这个文件中没有public的类,则文件名随便是一个类的名字即可。
当使用javac 指令编译.java文件时,它会给每一个类生成一个对应的.class文件

8. 什么是构造函数

构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。在Java语言中,构造函数具有以下特点:
①构造函数必须与类同名,并且不能有返回值(返回值也不能为void)
②每个类可以有多个构造函数。开发人员没提供构造函数,则使用一个没有参数的默认的构造函数,该构造函数不会执行任何代码;若开发人员提供了构造函数,那么编译器就不会再创建默认的构造函数了
③构造函数可以有0个、1个或1个以上的参数
④构造函数总是伴随着new操作一起使用,必须要由系统调用
⑤构造函数的主要作用是完成对象的初始化工作
⑥构造函数不能被继承,因此,它不能被覆盖,但可以被重载,可以使用不同的参数个数或参数类型来定义多个构造函数
⑦子类可以通过super关键字来显式地调用父类的构造函数,当父类没有提供无参数的构造函数时,子类的构造函数中必须显示地调用父类的构造函数
⑧当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参数的构造函数,给子类也生成一个默认的无参数的构造函数。默认构造器的修饰符只跟当前类的修饰符有关
普通方法可以与构造函数有相同的方法

9. 为什么Java中有些接口没有任何方法

Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java引入了接口的概念。接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类。接口中只包括方法的定义,没有方法的实现。接口中的所有方法都是抽象方法。接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final 修饰。由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接达到多重继承的目的。
在Java语言中,有些接口内部没有声明任何方法,也就是说,实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充当一个标识的作用,用来表明它的类属于一个特定的类型

10. 什么是反射机制

它允许程序在运行时进行自我检查,同时也允许对其内部的成员进行操作。反射机制提供的功能有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用该对象的方法。
其实,反射机制非常重要的一个作用就是可以在运行时动态地创建类的对象
在反射机制中,Class是一个非常重要的类,总共有以下三种方法可以获取到Class类:
①Class.forName(“类的路径”)
②类名.Class
③实例.getClass()
Java创建对象的方式有几种?
①通过new语句实例化一个对象
②通过反射机制创建对象
③通过clone()方法创建一个对象
④通过反序列化的方式创建对象

11. package有什么作用

第一,提供多层命名空间,解决命名冲突,通过package,使得处于不同package中的类可以存在相同的名字
第二,对类按功能进行分类,是项目的组织更加清晰

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页