Day1

1. JAVA的优点,为什么选择JAVA

  1. 从JAVA与C++的区别:Java是一门非常纯粹的面向对象的编程语言,它在吸收c++语言各种优点的同时,去除了c++语言中令人难以理解的多继承、指针等概念。所以Java语言在保证强大功能性的基础上,还比c++语言更为简单易用。
  2. Java语言极好地实现了面向对象理论,是静态面向对象编程语言的代表,它的存在保证了程序员可以用优雅的思维方式进行复杂的编程
  3. Java还拥有平台独立性,可以做到“一次编译,到处运行”。
  4. Java还提供了很多内置的类库,通过这些类库,简化了开发人员的程序设计工作,缩短了项目开发时间,最重要的是Java提供了垃圾回收器,这也将开发人员从对内存的管理中解脱出来。
  5. 同时Java拥有良好的安全性和健壮性,Java语言被经常用于网络环境中,为了增强程序的安全性,java语言提供了一个防止恶意代码攻击的安全机制(数组边界检测和bytecode校验等)。Java的强类型机制、垃圾回收器、异常处理和安全检查机制使得用Java语言编写的程序有很好的健壮性。
  6. Java还提供了对Web应用的开发支持:例如Applet,Servlet和JSP可以用来开发Web应用程序;Socket、RMI可以用来开发分布式应用程序的类库。
  7. Java为什么可以跨平台?JVM是Java跨平台的关键。在运行程序之前,Java源代码需要经过编译器,将源代码翻译成字节码,但字节码不能直接运行,所以必须通过JVM将字节码翻译成特定平台的机器码运行程序。但跨平台的是Java程序、而不是JVM,所以需要再不同平台下安装不同版本的JVM

2. 请说说Java的基本数据类型和引用类型

  1. Java的数据类型分为基本数据类型和引用数据类型两大类。基本数据类型共有八大类,这八大数据类型又可分为四小类,分别是整数类型(byte/short/int/long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。其中,int是最常用的整数类型,double是最为常用的浮点类型,除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。引用类型包括数组、类、接口,还有一种特殊的null类型,所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。
  2. byte-->1字节,short--->2字节,int-->4字节,long--->8字节,float--->4字节,double--->8字节,char--->2字节,数据范围为\u0000~\uffff。boolean:Java规范没有明确的规定,不同的JVM有不同的实现机制。

3. 请说一下接口和抽象类的区别

  1. 接口和抽象类的相同点:接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承;接口和抽象类都可以有抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法
  2. 用法上的差异:接口里只能包含抽象方法和默认方法,不能为普通方法提供方法实现;抽象类则可以包含普通方法。当一个类实现多个接口,且这些接口具有相同的默认方法时,编译器会要求实现类提供自己的实现,以解决潜在的冲突。这时,实现类可以通过调用指定接口的默认方法,也可以提供自己的实现。且java8开始,接口里的抽象方法可以不加abstract关键字
  3. 接口里只能定义静态常量,不能定义普通成员变量;抽象类里既可以定义普通成员变量,也可以定义静态常量;接口里不包含构造器,抽象类可以包含构造器,但抽象类里的构造器并不是用来创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作;接口里不包含初始化块,抽象类则可以包含初始化块;
  4. 一个类最多只能有一个父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的不足。
  5. 在二者的设计目的上,接口作为系统与外界交互的窗口,体现了一种规范。对于接口的实现者来说,接口规定了实现者必须向外提供哪些服务;对于接口的调用者而言,接口规定了调用者可以调用哪些服务,以及如何调用这些服务。
  6. 当在一个程序中使用接口时,接口是多个模块间的耦合标准;当在多个应用程序之间使用接口时,接口是多个程序之间的通信标准。抽象类则不一样,抽象类作为系统中多个子类的共同父类,它体现的是一种模版式设计。抽象类作为多个子类的父类,他可以被当做系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但这个产品依旧不能当做最终产品,必须要有更进一步的完善。

4. 请说一下final关键字

  1. final关键字可以用来标志其修饰的类,方法和变量不可变。当final修饰类时,该类不能被继承,例如java.lang.Math类就是一个final类,他不能被继承。final修饰的方法不能被重写,如果出于某些原因不希望子类重写父类的某个方法,就可以用final关键字修饰这个方法。当final用来修饰变量时,代表该变量不可被改变,一旦获得了初始值,该final变量的值就不能被重新赋值。final既可以修饰成员变量(包括类变量和实例变量),也可以修饰局部变量、形参。

  2. 对于final修饰的成员变量而言,一旦有了初始值就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在初始化块,构造器中为成员变量指定初始值,那么这个成员变量的值将一直是系统默认分配的0、‘\u0000'、false或者是null,那么这个成员变量就失去了存在的意义,所以Java语法规定:final修饰的成员变量必须由程序员显式地指定初始值。

  3. final修饰的实力变量,要么在定义该实例变量时指定初始值,要么在普通初始化块或构造器中为该实例变量指定初始值。但要注意的是,如果普通初始化块已经为某个实例变量指定了初始值,则不能再在构造器中为该实例变量指定初始值。

  4. final修饰的类变量(static修饰),要么在定义该变量时指定初始值,要么在静态初始化块中为该类变量指定初始值。

  5. 实例变量不能再静态初始化块中指定初始值,因为静态初始化块是静态成员,不可用访问实例变量;

  6. 类变量不能再普通初始化块中指定初始值,因为类变量在类初始化阶段已经被初始化了,普通的初始化块不能为其重复赋值。系统不会为局部变量进行初始化,所以final修饰的局部变量必须由程序员显示地初始化,且只能赋值一次,否则编译器会报错。

5. 说说static修饰符的用法

  1. Java类中包含了成员变量、方法、构造器、初始化块和内部类(包括接口、枚举)5种成员,static关键字可以修饰除了构造器外的其他4种成员。static关键字修饰的成员被称为类成员。类成员属于整个类,不属于单个对象
  2. static关键字有一条非常重要的规则,即类成员不能访问实例成员,因为类成员是属于类的,类成员的作用域比实例成员的作用域更大,很容易出现类成员初始化完成时,但实例成员还没有被初始化,这时如果类成员访问实例成员就会引起大量错误。
  3. static修饰的部分会和类同时被加载。被static修饰的成员先于对象存在,因此,当一个类加载完毕,即使没有创建对象也可以去访问被static修饰的部分。
  4. 静态方法中没有this关键词,因为静态方法是和类同时被加载的,而this是随着对象的创建存在的。静态比对象优先存在。也就是说,静态可以访问静态,但静态不能访问非静态,而非静态可以访问静态。
最后修改:2024 年 06 月 08 日
如果觉得我的文章对你有用,请随意赞赏