[冲击SSP|八股速成】JAVA基础(一)

前言:

承蒙大家的厚爱,以后不搞抽象了,现在我把我秋招面经的笔记分享出来,希望大家能多多支持。

1. Java和C++的区别?

简答:

  1. 都是⾯向对象的语⾔,都⽀持封装、继承和多态;
  2. Java 不提供指针来直接访问内存,程序内存更加安全;
  3. Java 的类是单继承的,C++ ⽀持多重继承;虽然 Java 的类不可以多继承,但是接⼝可以多继承;
  4. Java 有⾃动内存管理机制,不需要程序员⼿动释放⽆⽤内存;
  5. 在 C 语⾔中,字符串或字符数组最后都会有⼀个额外的字符‘\0’来表示结束。但是,Java 语⾔中没有结束符这⼀概念。

详解:

1.指针

  JAVA 语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如野指针所造成的系统崩 溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。

2.多重继承

  c++ 支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。 Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实 现方式带来的诸多不便。

3.数据类型及类

  Java是完全面向对象的语言,所有函数和变量部必须是类 的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。 而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。

4.自动内存管理

  Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:

  Read r=new Read(); r.work();

  语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。而c十十中必须由程序贝释放内存资源, 增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行 的,利用空闲时间工作。

5.操作符重载

  Java不支持操作符重载。操作符重载被认为是c十十的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。

6.预处理功能

  Java不支持预处理功能。c/c十十在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加丁编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与c十十预处理器的功能类似。

7. Java不支持缺省函数参数,而c十十支持

  在c中,代码组织在函数中,函数可以访问程序的全局变量。c十十增加了类,提供了类算法,该算法是与类相连的函数,c十十类方法与Java类方法十分相似,然而,由于c十十仍然支持c,所以不能阻止c十十开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。

  Java没有函数,作为一个比c十十更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。

8 字符串

  c和c十十不支持字符串变量,在c和c十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:

  (1)在整个系统中建立字符串和访问字符串元素的方法是一致的;

  (2)J3阳字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;

  (3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;

  (4)可对字符串用“十”进行连接操作。

2. 你理解Java程序的主类和应用程序、小游戏的主类有什么不同吗?

1. Java应用程序主类(Application Main Class):

定义: Java应用程序主类是指包含main方法的类,它是整个Java应用程序的入口点。main方法是Java程序的起始点,JVM会从这个方法开始执行。

特点: 应用程序主类主要用于独立的Java应用程序,这些应用程序通常是由开发人员编写并在命令行或通过脚本启动的。应用程序主类负责启动整个应用程序的执行过程。

示例:

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

2. Java小程序主类(Applet Main Class):

定义: Java小程序主类是指包含main方法的类,用于启动Java小程序。Java小程序是一种基于Applet技术的轻量级、嵌入式的Java程序,通常用于Web浏览器中的Java Applet。

特点: 小程序主类主要用于启动Java小程序,这些小程序在Web浏览器中运行。Java小程序通常以Applet的形式嵌入到HTML页面中,由浏览器解释执行。

示例:

import java.applet.Applet;
import java.awt.Graphics;

public class MyApplet extends Applet {
    public void paint(Graphics g) {
        g.drawString("Hello, Java Applet!", 20, 20);
    }

    public static void main(String[] args) {
        // 主类的main方法,但在小程序中不会直接调用
    }
}

不同之处:

  1. ⼀个程序中可以有多个类,但只能有⼀个类是主类。在 Java 应⽤程序中,这个主类是指包含main()⽅法的类。⽽在 Java ⼩程序中,这个主类是⼀个继承⾃系统类 JApplet 或 Applet 的⼦类。
  2. 应⽤程序的主类不⼀定要求是 public 类,但⼩程序的主类要求必须是 public 类。主类是 Java程序执⾏的⼊⼝点。
  3. 应⽤程序是从主线程启动(也就是 main() ⽅法)。applet ⼩程序没有 main() ⽅法,主要是嵌在浏览器⻚⾯上运⾏(调⽤ init() 或者 run() 来启动)。

3. Java⾯向对象编程的三大特性是哪些?

一、封装(Encapsulation)

封装是将数据和对数据的操作封装在一个单元中,对外部隐藏具体实现细节的过程。在Java中,封装通过类的定义实现,包括以下方面:

  1. 访问修饰符:使用private、public、protected等访问修饰符来限制对类成员的访问。
  2. Getter和Setter方法:通过提供公共的Getter和Setter方法,控制对私有成员变量的访问和修改。
  3. 数据隐藏:将数据成员声明为私有(private),并通过公共方法提供对数据的访问和操作。

封装的优势:

  1. 隐藏实现细节:封装可以将类的实现细节隐藏起来,使得其他代码只能通过公共接口访问和操作数据。
  2. 提高安全性:封装可以保护数据的完整性,防止未经授权的访问和修改。
  3. 提高可维护性:封装使得修改类的内部实现时只需修改类内部的代码,而不会影响到其他代码。

二、继承(Inheritance)

继承是指一个类(子类)从另一个类(父类)继承属性和方法的过程。在Java中,通过关键字"extends"实现类的继承关系。继承具有以下特点:

  1. 单继承:Java中每个类只能直接继承一个父类,但可以通过实现接口来实现多重继承。
  2. 继承关系:子类继承了父类的属性和方法,可以直接使用父类的成员。
  3. 重写(Override):子类可以对继承的父类方法进行重写,以实现自己的逻辑。

继承的优势:

  1. 代码复用:继承可以使得子类复用父类的属性和方法,减少了代码的重复编写。
  2. 继承层次:通过继承可以创建类的层次结构,使得代码更加有组织和易于理解。
  3. 多态支持:继承是实现多态的基础,子类对象可以作为父类对象使用,提高了代码的灵活性和扩展性。

三、多态(Polymorphism)

多态是指同一类型的对象,在不同情况下表现出不同的行为。在Java中,多态可以通过继承和接口实现。多态的特点:

  1. 编译时多态:通过继承和方法重写,子类对象可以被当作父类对象使用。
  2. 运行时多态:通过方法的动态绑定,根据对象的实际类型确定调用哪个方法。

多态的优势:

  1. 灵活性和可扩展性:多态使得代码可以根据不同的对象实现不同的行为,增加了代码的灵活性和可扩展性。
  2. 代码重用:通过多态,可以通过父类类型引用指向不同子类的对象,减少了代码的重复编写。
  3. 统一接口:多态可以通过接口实现,提供了统一的接口定义,使得代码更加通用和可维护。

4. 字符型常量和字符串常量有什么区别?

形式

  • 字符常量:由单引号 ' 引起的一个字符。
char letter = 'A';
  • 字符串常量:由双引号 " 引起的 0 个或若干个字符。
String greeting = "Hello, world!";

含义

  • 字符常量:相当于一个整型值(ASCII 值),可以参加表达式运算。例如,字符 'A' 的 ASCII 值为 65,可以用于算术运算。
char letter = 'A';
int asciiValue = letter; // asciiValue 的值为 65
  • 字符串常量:代表一个地址值,即该字符串在内存中的存放位置。字符串在Java中是对象,因此可以调用字符串的方法。
String greeting = "Hello";
int length = greeting.length(); // length 的值为 5

内存占用

  • 字符常量:在Java中,char 类型占用2个字节。
char letter = 'A';
System.out.println("字符型常量占用的字节数为:" + Character.BYTES); // 输出:2
  • 字符串常量:占若干个字节,具体取决于字符串的长度和编码方式。在UTF-8编码中,每个字符通常占用1个字节,但对于一些特殊字符可能会占用更多字节。

以下代码展示了字符型常量和字符串常量的定义及其内存占用情况:

public class StringExample {
    // 字符型常量
    public static final char LETTER_A = 'A';
    
    // 字符串常量
    public static final String GREETING_MESSAGE = "Hello, world!";
    
    public static void main(String[] args) {
        System.out.println("字符型常量占用的字节数为:" + Character.BYTES);
        System.out.println("字符串常量占用的字节数为:" + GREETING_MESSAGE.getBytes().length);
    }
}

深入剖析

实际应用场景
  1. 字符常量的应用:用于表示单个字符,如性别、标识符等。在字符运算和位运算中使用,例如加密算法中的字符位移。
  2. 字符串常量的应用:用于表示文本信息,如用户输入、日志信息、配置参数等。在字符串处理和操作中广泛应用,如拼接、拆分、替换等。

5. 你能解释一下什么是JVM、JDK和JRE吗?它们之间有何关系?

04 JDK、JRE与JVM的关系

JDK、JRE与JVM之间的关系可以分为以下几个关键点进行详细描述:

1 定义与功能

  • JDK(Java Development Kit):JDK是Java开发者的主要工具包,它包含了JRE(Java运行环境)以及Java开发工具,如编译器(javac)和调试器(jdb)等。JDK主要用于开发Java应用程序,它提供了编译、运行和调试Java程序所需的所有工具。
  • JRE(Java Runtime Environment):JRE是Java程序的运行环境,它包含了JVM(Java虚拟机)以及Java类库。JRE的主要作用是提供Java程序运行所需的运行时环境,使得开发者能够在不同的操作系统上运行Java程序。
  • JVM(Java Virtual Machine):JVM是Java程序的核心运行环境,它负责解释和执行Java字节码。JVM具有跨平台性,能够在不同的操作系统上运行相同的Java程序。

2 关系与层次

  • JVM与JRE的关系:JVM是JRE的核心组件,JRE包含了JVM以及Java类库。JVM提供了Java程序的运行环境,而Java类库则提供了丰富的功能和工具,使得开发者能够更方便地开发Java程序。
  • JRE与JDK的关系:JRE是JDK的一部分,JDK包含了JRE以及Java开发工具。JDK是开发Java程序的主要工具包,而JRE则是运行Java程序所必需的运行时环境。
  • 三者之间的层次关系:从层次结构上看,JDK是最顶层,它包含了JRE;而JRE又包含了JVM。这种层次关系体现了Java平台的构建原则,即“一次编写,到处运行”。

3 作用与重要性

  • JVM的作用:JVM是Java程序的核心运行环境,它负责解释和执行Java字节码。JVM的跨平台性使得Java程序能够在不同的操作系统上运行,而无需对代码进行任何修改。
  • JRE的作用:JRE提供了Java程序运行所需的运行时环境,包括JVM和Java类库。JRE使得开发者能够在不同的操作系统上运行Java程序,而无需关心底层操作系统的细节。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

java面筋八股大全 文章被收录于专栏

(1)全网最精简八股整理,各个头部公司最新面经整理(2)面试时非技术问题的话术整理;价格随着内容增加而增加,早订阅早享受

全部评论
mark
点赞 回复 分享
发布于 昨天 23:42 北京

相关推荐

牛客302360988号:加油 养成面完再哭的习惯 我今天面完断断续续哭了好几次 这几个月压力太大了
点赞 评论 收藏
分享
少糖去冰的小师弟很沉稳:一群cs公司lz摇奶茶都不止这点钱,md3k***
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务