这篇 Java 基础,我吹不动了

Posted 程序员cxuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这篇 Java 基础,我吹不动了相关的知识,希望对你有一定的参考价值。

Hey guys,这里是程序员cxuan,欢迎你收看我最新一期的文章,这篇文章我补充了一些关于《Java基础核心总结》的内容,修改了部分错别字和语句不通顺的地方,并且对内部类、泛型等内容进行了一定的补充,并且我在文章有些地方给出了一些链接,这些链接都是我自己写的硬核文章,能够更好的帮助你理解 Java 这门语言,那么废话不多说,下面开始正文。

Java 概述

什么是 Java?

Java 是 Sun Microsystems 于1995 年首次发布的一种编程语言和计算平台。编程语言还比较好理解,那么什么是 计算平台 呢?

计算平台是在电脑中运行应用程序(软件)的环境,包括硬件环境软件环境。一般系统平台包括一台电脑的硬件体系结构、操作系统、运行时库。

Java 是快速,安全和可靠的。 从笔记本电脑到数据中心,从游戏机到科学超级计算机,从手机到互联网,Java 无处不在!Java 主要分为三个版本:

  • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)

JavaSE 是 JavaEE 和 JavaME 的基础,JavaSE 就是基于 JDK 和 JRE,然后还包含了一些支持 Java Web 服务开发的类

  • JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)

JavaEE 一开始叫 J2EE,后来改名为 JavaEE,它是 JavaSE 的一个扩展,这是我们企业级开发使用的一个版本,包括一些 Java Web 工具包。

  • JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。

JavaME 一般用于移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。

Java 的特点

  • Java 是一门面向对象的编程语言

什么是面向对象?面向对象(Object Oriented) 是一种软件开发思想。它是对现实世界的一种抽象,面向对象会把相关的数据和方法组织为一个整体来看待。

相对的另外一种开发思想就是面向过程的开发思想,什么面向过程?面向过程(Procedure Oriented) 是一种以过程为中心的编程思想。

再举个例子:比如你是个学生,你每天去上学需要做几件事情?

起床、穿衣服、洗脸刷牙,吃饭,去学校。一般是顺序性的完成一系列动作。

class student {
		void student_wakeUp(){...}
  	void student_cloth(){...}
  	void student_wash(){...}
  	void student_eating(){...}
  	void student_gotoSchool(){...}
}

而面向对象可以把学生进行抽象,所以这个例子就会变为

class student(){
  	void wakeUp(){...}
  	void cloth(){...}
  	void wash(){...}
  	void eating(){...}
  	void gotoSchool(){...}
}

可以不用严格按照顺序来执行每个动作。这是特点一。

  • Java 摒弃了 C++ 中难以理解的多继承、指针、内存管理等概念;不用手动管理对象的生命周期,这是特征二。
  • Java 语言具有功能强大和简单易用两个特征,现在企业级开发,快速敏捷开发,尤其是各种框架的出现,使 Java 成为越来越火的一门语言。这是特点三。
  • Java 是一门静态语言,静态语言指的就是在编译期间就能够知道数据类型的语言,在运行前就能够检查类型的正确性,一旦类型确定后就不能再更改,比如下面这个例子。
public void foo() {
    int x = 5;
    boolean b = x;
}

静态语言主要有 Pascal, Perl, C/C++, JAVA, C#, Scala 等。

相对应的,动态语言没有任何特定的情况需要指定变量的类型,在运行时确定的数据类型。比如有**Lisp, Perl, Python、Ruby、javascript **等。

从设计的角度上来说,所有语言的设计目的都是用来把人类可读的代码转换为机器指令。下面是一幅语言分类图。

动态语言是为了能够让程序员提高编码效率,因此你可以使用更少的代码来实现功能。静态语言设计是用来让硬件执行的更高效,因此需要程序员编写准确无误的代码,以此来让你的代码尽快的执行。从这个角度来说,静态语言的执行效率要比动态语言高,速度更快。这是特点四。

  • Java 具有平台独立性和可移植性

Java 有一句非常著名的口号: Write once, run anywhere,也就是一次编写、到处运行。为什么 Java 能够吹出这种牛批的口号来?核心就是 JVM。我们知道,计算机应用程序和硬件之间会屏蔽很多细节,它们之间依靠操作系统完成调度和协调,大致的体系结构如下

那么加上 Java 应用、JVM 的体系结构会变为如下

Java 是跨平台的,已编译的 Java 程序可以在任何带有 JVM 的平台上运行。你可以在 Windows 平台下编写代码,然后拿到 Linux 平台下运行,该如何实现呢?

首先你需要在应用中编写 Java 代码;

Eclipse 或者 javac 把 Java 代码编译为 .class 文件;

然后把你的 .class 文件打成 .jar 文件;

然后你的 .jar 文件就能够在 Windows 、Mac OS X、Linux 系统下运行了。不同的操作系统有不同的 JVM 实现,切换平台时,不需要再次编译你的 Java 代码了。这是特点五。

  • Java 能够容易实现多线程

Java 是一门高级语言,高级语言会对用户屏蔽很多底层实现细节。比如 Java 是如何实现多线程的。从操作系统的角度来说,实现多线程的方式主要有下面这几种

在用户空间中实现多线程

在内核空间中实现多线程

在用户和内核空间中混合实现线程

而我认为 Java 应该是在 用户空间 实现的多线程,内核是感知不到 Java 存在多线程机制的。这是特点六。

  • Java 具有高性能

我们编写的代码,经过 javac 编译器编译称为 字节码(bytecode),经过 JVM 内嵌的解释器将字节码转换为机器代码,这是解释执行,这种转换过程效率较低。但是部分 JVM 的实现比如 Hotspot JVM 都提供了 JIT(Just-In-Time) 编译器,也就是通常所说的动态编译􏱆器,JIT 能够在运行时将􏲀热点代码编译机器码,这种方式运行效率比较高,这是编译执行。所以 Java 不仅仅只是一种解释执行的语言。这是特点七。

  • Java 语言具有健壮性

Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。这也是 Java 与 C 语言的重要区别。这是特点八。

  • Java 很容易开发分布式项目

Java 语言支持 Internet 应用的开发,Java 中有 net api,它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。这是特点九。

一个小例子说明一下面相过程和面向对象的区别

一、面向过程

为了把大象装进冰箱,需要3个过程。

思路:

1、把冰箱门打开(得到打开门的冰箱)。

2、把大象装进去(打开门后,得到里面装着大象的冰箱)。

3、把冰箱门关上(打开门、装好大象后,获得关好门的冰箱)。

根据上面的思路,可以看到,每个过程都有一个阶段性的目标,依次完成这些过程,就能把大象装进冰箱。

二、面向对象

为了把大象装进冰箱,需要做三个动作(或者叫行为)。每个动作有一个执行者,它就是对象。

思路:

1、冰箱,你给我把门打开。

2、冰箱,你给我把大象装进去(或者说,大象,你给我钻到冰箱里去)。

3、冰箱,你给我把门关上。

依次完成这些动作,你就可以把大象装进去。

Java 开发环境

JDK

JDK(Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 的 Applet 小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一些Java 工具Java 的核心类库(Java API)

我们可以认真研究一下这张图,它几乎包括了 Java 中所有的概念,我使用的是 jdk1.8,可以点进去 Description of Java Conceptual Diagram, 可以发现这里面包括了所有关于 Java 的描述。

Oracle 提供了两种 Java 平台的实现,一种是我们上面说的 JDK,Java 开发标准工具包,一种是 JRE,叫做Java Runtime Environment,Java 运行时环境。JDK 的功能要比 JRE 全很多。

JRE

JRE 是个运行环境,JDK 是个开发环境。因此写 Java 程序的时候需要 JDK,而运行 Java 程序的时候就需要JRE。而 JDK 里面已经包含了JRE,因此只要安装了JDK,就可以编辑 Java 程序,也可以正常运行 Java 程序。但由于 JDK 包含了许多与运行无关的内容,占用的空间较大,因此运行普通的 Java 程序无须安装 JDK,而只需要安装 JRE 即可。

Java 开发环境配置

这里给大家推荐几个 JDK 安装和配置的博客:

Windows 版本 JDK 的下载和安装

mac 版本 JDK 的下载和安装

Java 基本语法

在配置完 Java 开发环境,并下载 Java 开发工具(Eclipse、IDEA 等)后,就可以编写 Java 程序了,因为这个教程是从头梳理 Java 体系,所以有必要从基础的概念开始谈起。

数据类型

在 Java 中,数据类型只有四类八种

  • 整数型:byte、short、int、long

byte 也就是字节,1 byte = 8 bits,byte 的默认值是 0 ;

short 占用两个字节,也就是 16 位,1 short = 16 bits,它的默认值也是 0 ;

int 占用四个字节,也就是 32 位,1 int = 32 bits,默认值是 0 ;

long 占用八个字节,也就是 64 位,1 long = 64 bits,默认值是 0L;

所以整数型的占用字节大小空间为 long > int > short > byte

  • 浮点型

浮点型有两种数据类型:float 和 double

float 是单精度浮点型,占用 4 位,1 float = 32 bits,默认值是 0.0f;

double 是双精度浮点型,占用 8 位,1 double = 64 bits,默认值是 0.0d;

  • 字符型

字符型就是 char,char 类型是一个单一的 16 位 Unicode 字符,最小值是 \\u0000 (也就是 0 ),最大值是 \\uffff (即为 65535),char 数据类型可以存储任何字符,例如 char a = ‘A’。

  • 布尔型

布尔型指的就是 boolean,boolean 只有两种值,true 或者是 false,只表示 1 位,默认值是 false。

以上 x 位都指的是在内存中的占用。

基础语法

  • 大小写敏感:Java 是对大小写敏感的语言,例如 Hello 与 hello 是不同的,这其实就是 Java 的字符串表示方式。
  • 类名:对于所有的类来说,首字母应该大写,例如 MyFirstClass
  • 包名:包名应该尽量保证小写,例如 my.first.package
  • 方法名:方法名首字母需要小写,后面每个单词字母都需要大写,例如 myFirstMethod()

运算符

运算符不只 Java 中有,其他语言也有运算符,运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面,我们就以 Java 为例,来看一下运算符。

  • 赋值运算符

赋值运算符使用操作符 = 来表示,它的意思是把 = 号右边的值复制给左边,右边的值可以是任何常数、变量或者表达式,但左边的值必须是一个明确的,已经定义的变量。比如 int a = 4

但是对于对象来说,复制的不是对象的值,而是对象的引用,所以如果说将一个对象复制给另一个对象,实际上是将一个对象的引用赋值给另一个对象

  • 算数运算符

算数运算符就和数学中的数值计算差不多,主要有

算数运算符需要注意的就是优先级问题,当一个表达式中存在多个操作符时,操作符的优先级顺序就决定了计算顺序,最简单的规则就是先乘除后加减,() 的优先级最高,没必要记住所有的优先级顺序,不确定的直接用 () 就可以了。

  • 自增、自减运算符

这个就不文字解释了,解释不如直接看例子明白

int a = 5;
b = ++a;
c = a++;
  • 比较运算符

比较运算符用于程序中的变量之间,变量和自变量之间以及其他类型的信息之间的比较。

比较运算符的运算结果是 boolean 型。当运算符对应的关系成立时,运算的结果为 true,否则为 false。比较运算符共有 6 个,通常作为判断的依据用于条件语句中。

  • 逻辑运算符

逻辑运算符主要有三种,与、或、非

下面是逻辑运算符对应的 true/false 符号表

  • 按位运算符

按位运算符用来操作整数基本类型中的每个比特位,也就是二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。

如果进行比较的双方是数字的话,那么进行比较就会变为按位运算。

按位与:按位进行与运算(AND),两个操作数中位都为1,结果才为1,否则结果为0。需要首先把比较双方转换成二进制再按每个位进行比较

按位或:按位进行或运算(OR),两个位只要有一个为1,那么结果就是1,否则就为0。

按位异或:按位进行异或运算(XOR),如果位为0,结果是1,如果位为1,结果是0。

按位非:按位进行取反运算(NOT),两个操作数的位中,相同则结果为0,不同则结果为1。

  • 移位运算符

移位运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。

  • 三元运算符

三元运算符是类似 if...else... 这种的操作符,语法为:条件表达式?表达式 1:表达式 2。问号前面的位置是判断的条件,判断结果为布尔型,为 true 时调用表达式 1,为 false 时调用表达式 2。

Java 执行控制流程

Java 中的控制流程其实和 C 一样,在 Java 中,流程控制会涉及到包括 if-else、while、do-while、for、return、break 以及选择语句 switch。下面以此进行分析。

条件语句

条件语句可根据不同的条件执行不同的语句。包括 if 条件语句与 switch 多分支语句。

if 条件语句

if 语句可以单独判断表达式的结果,表示表达的执行结果,例如:

int a = 10;
if(a > 10){
  return true;
}
return false;

if…else 条件语句

if 语句还可以与 else 连用,通常表现为 如果满足某种条件,就进行某种处理,否则就进行另一种处理

int a = 10;
int b = 11;
if(a >= b){
  System.out.println("a >= b");
}else{
  System.out.println("a < b");
}

if 后的 () 内的表达式必须是 boolean 型的。如果为 true,则执行 if 后的复合语句;如果为 false,则执行 else 后的复合语句。

if…else if 多分支语句

上面中的 if…else 是单分支和两个分支的判断,如果有多个判断条件,就需要使用 if…else if

int x = 40;
if(x > 60) {
  System.out.println("x的值大于60");
} else if (x > 30) {
  System.out.println("x的值大于30但小于60");
} else if (x > 0) {
  System.out.println("x的值大于0但小于30");
} else {
  System.out.println("x的值小于等于0");
}

switch case多分支语句

一种比 **if…else if ** 语句更优雅的方式是使用 switch 多分支语句,它的示例如下:

switch (week) {
  case 1:
    System.out.println("Monday");
    break;
  case 2:
    System.out.println("Tuesday");
    break;
  case 3:
    System.out.println("Wednesday");
    break;
  case 4:
    System.out.println("Thursday");
    break;
  case 5:
    System.out.println("Friday");
    break;
  case 6:
    System.out.println("Saturday");
    break;
  case 7:
    System.out.println("Sunday");
    break;
  default:
    System.out.println("No Else");
    break;
}

循环语句

循环语句就是在满足一定的条件下反复执行某一表达式的操作,直到满足循环语句的要求。使用的循环语句主要有 **for、do…while() 、 while **。

while 循环语句

while 循环语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句。while 循环语句的格式如下:

while(布尔值){
  表达式
}

它的含义是,当 (布尔值) 为 true 的时候,执行下面的表达式,布尔值为 false 的时候,结束循环,布尔值其实也是一个表达式,比如:

int a = 10;
while(a > 5){
  a--;
}

do…while 循环

while 与 do…while 循环的唯一区别是 do…while 语句至少执行一次,即使第一次的表达式为 false。而在 while 循环中,如果第一次条件为 false,那么其中的语句根本不会执行。在实际应用中,while 要比 do…while 应用的更广。它的一般形式如下:

int b = 10;
// do···while循环语句
do {
  System.out.println("b == " + b);
  b--;
} while(b == 1);

for 循环语句

for 循环是我们经常使用的循环方式,这种形式会在第一次迭代前进行初始化。它的形式如下:

for(初始化; 布尔表达式; 步进){}

每次迭代前会测试布尔表达式。如果获得的结果是 false,就会执行 for 语句后面的代码;每次循环结束,会按照步进的值执行下一次循环。

逗号操作符

这里不可忽略的一个就是逗号操作符,Java 里唯一用到逗号操作符的就是 for 循环控制语句。在表达式的初始化部分,可以使用一系列的逗号分隔的语句;通过逗号操作符,可以在 for 语句内定义多个变量,但它们必须具有相同的类型。

for(int i = 1,j = i + 10;i < 5;i++, j = j * 2){}

for-each 语句

在 Java JDK 1.5 中还引入了一种更加简洁的、方便对数组和集合进行遍历的方法,即 for-each 语句,例子如下:

int array[] = {7, 8, 9};

for (int arr : array) {
     System.out.println(arr);
}

跳转语句

Java 语言中,有三种跳转语句: break、continue 和 return

break 语句

break 语句我们在 switch 中已经见到了,它是用于终止循环的操作,实际上 break 语句在for、while、do···while循环语句中,用于强行退出当前循环,例如:

for(int i = 0;i < 10;i++){
	if(i == 5){
    break;
  }
}

continue 语句

continue 也可以放在循环语句中,它与 break 语句具有相反的效果,它的作用是用于执行下一次循环,而不是退出当前循环,还以上面的例子为主:

for(int i = 0;i < 10;i++){
  
  System.out.printl(" i = " + i );
	if(i == 5){
    System.out.printl("continue ... ");
    continue;
  }
}

return 语句

return 语句可以从一个方法返回,并把控制权交给调用它的语句。

public void getName() {
    return name;
}

面向对象

面向对象是学习 Java 一种非常重要的开发思想,但是面向对象并不是 Java 所特有的思想,这里大家不要搞混了。

下面我们来探讨面向对象的思想,面向对象的思想已经逐步取代了过程化的思想 — 面向过程,Java 是面向对象的高级编程语言,面向对象语言具有如下特征

  • 面向对象是一种常见的思想,比较符合人们的思考习惯;

  • 面向对象可以将复杂的业务逻辑简单化,增强代码复用性;

  • 面向对象具有抽象、封装、继承、多态等特性。

面向对象的编程语言主要有:C++、Java、C#等。

所以必须熟悉面向对象的思想才能编写出 Java 程序。

类也是一种对象

现在我们来认识一个面向对象的新的概念 — 类,什么是类,它就相当于是一系列对象的抽象,就比如书籍一样,类相当于是书的封面,大多数面向对象的语言都使用 class 来定义类,它告诉你它里面定义的对象都是什么样的,我们一般使用下面来定义类

class ClassName {
	// body;
}

代码段中涉及一个新的概念 // ,这个我们后面会说。上面,你声明了一个 class 类,现在,你就可以使用 new 来创建这个对象

ClassName classname = new ClassName();

一般,类的命名遵循驼峰原则,它的定义如下:

骆驼式命名法(Camel-Case)又称驼峰式命名法,是电脑程式编写时的一套命名规则(惯例)。正如它的名称 CamelCase 所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。程序员们为了自己的代码能更容易的在同行之间交流,所以多采取统一的可读性比较好的命名方式。

对象的创建

在 Java 中,万事万物都是对象。这句话相信你一定不陌生,尽管一切都看作是对象,但是你操纵的却是一个对象的 引用(reference)。在这里有一个很形象的比喻:你可以把车钥匙和车看作是一组对象引用和对象的组合。当你想要开车的时候,你首先需要拿出车钥匙点击开锁的选项,停车时,你需要点击加锁来锁车。车钥匙相当于就是引用,车就是对象,由车钥匙来驱动车的加锁和开锁。并且,即使没有车的存在,车钥匙也是一个独立存在的实体,也就是说,你有一个对象引用,但你不一定需要一个对象与之关联,也就是

Car carKey;

这里创建的只是引用,而并非对象,但是如果你想要使用 s 这个引用时,会返回一个异常,告诉你需要一个对象来和这个引用进行关联。一种安全的做法是,在创建对象引用时同时把一个对象赋给它。

Car carKey = new Car();

在 Java 中,一旦创建了一个引用,就希望它能与一个新的对象进行关联,通常使用 new 操作符来实现这一目的。new 的意思是,给我一个新对象,如果你不想相亲,自己 new 一个对象就好了。祝你下辈子幸福。

属性和方法

类一个最基本的要素就是有属性和方法。

属性也被称为字段,它是类的重要组成部分,属性可以是任意类型的对象,也可以是基本数据类型。例如下

class A{
  int a;
  Apple apple;
}

类中还应该包括方法,方法表示的是 做某些事情的方式。方法其实就是函数,只不过 Java 习惯把函数称为方法。这种叫法也体现了面向对象的概念。

方法的基本组成包括 方法名称、参数、返回值和方法体, 下面是它的示例:

public int getResult(){
  // ...
  return 1;
}

其中,getResult 就是方法名称、() 里面表示方法接收的参数、return 表示方法的返回值。有一种特殊的参数类型 — void 表示方法无返回值。{} 包含的代码段被称为方法体。

构造方法

在 Java 中,有一种特殊的方法被称为 构造方法,也被称为构造函数、构造器等。在 Java 中,通过提供这个构造器,来确保每个对象都被初始化。构造方法只能在对象的创建时期调用一次,保证了对象初始化的进行。构造方法比较特殊,它没有参数类型和返回值,它的名称要和类名保持一致,并且构造方法可以有多个,下面是一个构造方法的示例:

class Apple {
  
  int sum;
  String color;
  
  public Apple(){}
  public Apple(int sum){}
  public Apple(String color){}
  public Apple(int sum,String color){}
  
}

上面定义了一个 Apple 类,你会发现这个 Apple 类没有参数类型和返回值,并且有多个以 Apple 同名的方法,而且各个 Apple 的参数列表都不一样,这其实是一种多态的体现,我们后面会说。在定义完成构造方法后,我们就能够创建 Apple 对象了。

class createApple {

    public static void main(String[] args) {
        Apple apple1 = new Apple();
        Apple apple2 = new Apple(1);
        Apple apple3 = new Apple("red");
        Apple apple4 = new Apple(2,"color");

    }
}

如上面所示,我们定义了四个 Apple 对象,并调用了 Apple 的四种不同的构造方法,其中,不加任何参数的构造方法被称为默认的构造方法,也就是

Apple apple1 = new Apple();

如果类中没有定义任何构造方法,那么 JVM 会为你自动生成一个构造方法,如下:

class Apple {    int sum;  String color;  }class createApple {    public static void main(String[] args) {        Apple apple1 = new Apple();    }}

上面代码不会发生编译错误,因为 Apple 对象包含了一个默认的构造方法。

默认的构造方法也被称为默认构造器或者无参构造器。

这里需要注意一点的是,即使 JVM 会为你默认添加一个无参的构造器,但是如果你手动定义了任何一个构造方法,JVM 就不再为你提供默认的构造器,你必须手动指定,否则会出现编译错误

显示的错误是,必须提供 Apple 带有 int 参数的构造函数,而默认的无参构造函数没有被允许使用。

方法重载

在 Java 中一个很重要的概念是方法的重载,它是类名的不同表现形式。我们上面说到了构造函数,其实构造函数也是重载的一种。另外一种就是方法的重载

public class Apple {    int sum;    String color;    public Apple(){}    public Apple(int sum){}        public int getApple(int num){        return 1;    }        public String getApple(String color){        return "color";    }}

如上面所示,就有两种重载的方式,一种是 Apple 构造函数的重载,一种是 getApple 方法的重载。

但是这样就涉及到一个问题,要是有几个相同的名字,Java 如何知道你调用的是哪个方法呢?这里记住一点即可,每个重载的方法都有独一无二的参数列表。其中包括参数的类型、顺序、参数数量等,满足一种一个因素就构成了重载的必要条件。

请记住下面重载的条件

  • 方法名称必须相同。

  • 参数列表必须不同(个数不同、或类型不同、参数类型排列顺序不同等)。

  • 方法的返回类型可以相同也可以不相同。

  • 仅仅返回类型不同不足以成为方法的重载。

  • 重载是发生在编译时的,因为编译器可以根据参数的类型来选择使用哪个方法。

方法的重写

方法的重写与重载虽然名字很相似,但却完全是不同的东西。方法重写的描述是对子类和父类之间的。而重载指的是同一类中的。例如如下代码

class Fruit { 	public void eat(){    System.out.printl('eat fruit');  }}class Apple extends Fruit{    @Override  public void eat(){    System.out.printl('eat apple');  }}

上面这段代码描述的就是重写的代码,你可以看到,子类 Apple 中的方法和父类 Fruit 中的方法同名,所以,我们能够推断出重写的原则

  • 重写的方法必须要和父类保持一致,包括返回值类型,方法名,参数列表 也都一样。
  • 重写的方法可以使用 @Override 注解来标识
  • 子类中重写方法的访问权限不能低于父类中方法的访问权限。

初始化

类的初始化

上面我们创建出来了一个 Car 这个对象,其实在使用 new

以上是关于这篇 Java 基础,我吹不动了的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Net Services 配置: 不动了?怎么办?

Java操作Hbase卡着不动了解决方法

三年Java,真的卷不动了……

卷不动了?300秒快速了解这些年Java 9 - 16的新特性,助你脱离内卷

Spring Boot 最新发布!Java 18 都加入了!!真的学不动了。。

卷不动了?300 秒快速了解 Java 9 - 16 新特性,助你脱离内卷