Java--1

293 阅读23分钟

todo

  • javadoc工具

常用cmd命令

| 操作               | 说明                              |
| ------------------ | --------------------------------- |
| 盘符名称:          | 盘符切换。E:回车,表示切换到E盘。 |
| dir                | 查看当前路径下的内容。            |
| cd 目录            | 进入单级目录。cd itheima          |
| cd ..              | 回退到上一级目录。                |
| cd 目录1\目录2\... | 进入多级目录。cd itheima\JavaSE   |
| cd \               | 回退到盘符目录。                  |
| cls                | 清屏。                            |
| exit               | 退出命令提示符窗口。              |

封装、继承、多态

  • 封装:
将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能
  • 继承:
面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法
  • 多态:
子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,
这意味着,同一个类型的对象在执行同一个方法时,可能表现出多种行为特征

字符串转Int或Integer

  • Integer.valueOf()和Integer.parseInt()的区别 返回值分别为:int对象和int基础类型
String str = "100";
Integer i1 = Integer.valueOf(str);
int x2 = Integer.parseInt(str);

分析:
两者不同的地方是它们返回的类型不一样。valueOf返回的是包装类型Integer,而parseInt返回的基本类型int。
结论:
valueOf()内部调用了parseInt(),把parseInt()返回的Int转化为了Integer对象
即:Integer.valueOf(str) 等同于new Integer(Integer.parseInt(str))。

判断字符串是否相等

字符串写前面,可以防止name空指针时报错

if("zhangsan".equal(name)){
}

split用法

需要转义的特殊字符: * ^ : | . \

1, split表达式,其实就是一个正则表达式。*  ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义。
2, 如果使用多个分隔符则需要借助 | 符号,如二所示,但需要转义符的仍然要加上分隔符进行处理

Oracle字段类型

Java基础

day01 - java基础语法

1. Java概述

1.1 Java语言发展史(了解)

语言:人与人交流沟通的表达方式

计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言

Java语言是美国Sun公司(Stanford University Network)在1995年推出的计算机语言

Java之父:詹姆斯·高斯林(James Gosling)

2009年,Sun公司被甲骨文公司收购,所以我们现在访问oracle官网即可:www.oracle.com

当前,我们课程使用的JDK版本:11.0

1.2 Java语言跨平台原理(理解)

Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的跨平台。

1.3 JRE和JDK(记忆)

JVM(Java Virtual Machine),Java虚拟机

JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)

JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具

总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机。

image.png

1.4 JDK的下载和安装(应用)

1.4.1 下载

通过官方网站获取JDK

www.oracle.com

注意:针对不同的操作系统,需要下载对应版本的JDK。

具体下载步骤请参见《JDK下载及安装说明文档》

1.4.2 安装

傻瓜式安装,下一步即可。但默认的安装路径是在C:\Program Files下,为方便统一管理建议修改安装路径,将与开发相关的软件都安装到一个目录下,例如:E:\develop。

注意:安装路径不要包含中文或者空格等特殊字符(使用纯英文目录)。

具体安装步骤请参见《JDK下载及安装说明文档》

1.4.3 JDK的安装目录介绍

目录名称说明
bin该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。
conf该路径下存放了JDK的相关配置文件。
include该路径下存放了一些平台特定的头文件。
jmods该路径下存放了JDK的各种模块。
legal该路径下存放了JDK各模块的授权文档。
lib该路径下存放了JDK工具的一些补充JAR包。

2. 入门程序HelloWorld

2.1 常用DOS命令(应用)

在接触集成开发环境之前,我们需要使用命令行窗口对java程序进行编译和运行,所以需要知道一些常用DOS命令。

1、打开命令行窗口的方式:win + r打开运行窗口,输入cmd,回车。

2.2 Path环境变量的配置(应用)

2.2.1 为什么配置环境变量

开发Java程序,需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令),而这些工具在JDK的安装目录的bin目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。我们不可能把所有的java文件都放到JDK的bin目录下,所以配置环境变量的作用就是可以使bin目录下的java相关命令可以在任意目录下使用。

  • 设置环境变量的位置和原理

image.png

注意:目前较新的JDK安装时会自动配置javac、java命令的路径到Path环境变量中去 ,所以javac、java可以直接使用。

但是以前下载的老版本的JDK是没有自动配置的,此时必需要自己配置Path环境变量。

image.png

JAVA_HOME:告诉操作系统JDK安装在了哪个位置(未来其他技术要通过这个找JDK)

image.png

Path:告诉操作系统JDK提供的javac(编译)、java(执行)、快捷启动的应用QQ,对应的启动命令安装到了哪个位置

注意:新版本的JDK只是自动配置了Path,没有自动配置JAVA_HOME。

2.3 HelloWorld案例(应用)

HelloWorld案例是指在计算机屏幕上输出“HelloWorld”这行文字。各种计算机语言都习惯使用该案例作为第一个演示案例。

2.3.1 Java程序开发运行流程

开发Java程序,需要三个步骤:编写程序,编译程序,运行程序。

2.3.2 HelloWorld案例的编写

1、新建文本文档文件,修改名称为HelloWorld.java。

2、用记事本打开HelloWorld.java文件,输写程序内容。

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

2.3.3 HelloWorld案例的编译和运行

存文件,打开命令行窗口,将目录切换至java文件所在目录,编译java文件生成class文件,运行class文件。

编译:javac 文件名.java

范例:javac HelloWorld.java

执行:java 类名

范例:java HelloWorld

2.4 HelloWorld案例常见问题(理解)

2.4.1 BUG

在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)。

2.4.2 BUG的解决

1、具备识别BUG的能力:多看

2、具备分析BUG的能力:多思考,多查资料

3、具备解决BUG的能力:多尝试,多总结

2.4.3 HelloWorld案例常见问题

1、非法字符问题。Java中的符号都是英文格式的。

2、大小写问题。Java语言对大小写敏感(区分大小写)。

3、在系统中显示文件的扩展名,避免出现HelloWorld.java.txt文件。

4、编译命令后的java文件名需要带文件后缀.java

5、运行命令后的class文件名(类名)不带文件后缀.class

...

3、IDEA安装使用

3.1 使用idea创建一个普通的项目

image.png

image.png

3.2导入模块

image.png

3.3完全卸载模块

  • 先在磁盘中删除模块(此时创建同名模块,可能会提示该模块已存在)
  • idea中右键任一模块,彻底删除模块 image.png
  • 再次创建同名的模块可能会无法识别为模块 image.png

4. java基础语法

4.1 注释(理解)

注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。Java中的注释分为三种:

单行注释。单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释文字。

// 这是单行注释文字

多行注释。多行注释的格式是使用/* 和 */将一段较长的注释括起来。

/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
注意:多行注释不能嵌套使用。

文档注释。文档注释以/**开始,以*/结束。(以后讲)

4.2 字面量(应用)

作用:告诉程序员,数据在程序中的书写格式。

字面量类型说明程序中的写法
整数不带小数的数字666,-88
小数带小数的数字13.14,-5.21
字符必须使用单引号,有且仅能一个字符‘A’,‘0’, ‘我’
字符串必须使用双引号,内容可有可无“HelloWorld”,“黑马程序员”
布尔值布尔值,表示真假,只有两个值:true,falsetrue 、false
空值一个特殊的值,空值值是:null
public class Demo {
    public static void main(String[] args) {
        System.out.println(10); // 输出一个整数
        System.out.println(5.5); // 输出一个小数
        System.out.println('a'); // 输出一个字符
        System.out.println(true); // 输出boolean值true
        System.out.println("欢迎来到黑马程序员"); // 输出字符串
    }
}

4.3 数据类型(记忆、应用)

3.4.1 计算机存储单元
计算机底层都是一些数字电路(理解成开关),用开表示0、关表示1,这些01的形式就是二进制。

数据在计算机底层都是采用二进制存储的,l在计算机中认为一个开关表示的0|1称为1位(b),每8位称为一个字节(B), 所以1B=8b

字节是计算机中数据的最小单位。

我们知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,我们又称之为“比特位”,通常用小写的字母”b”表示。而计算机中最基本的存储单元叫“字节(byte)”,

通常用大写字母”B”表示,字节是由连续的8个位组成。

除了字节外还有一些常用的存储单位,其换算单位如下:

1B(字节) = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB
3.4.2 Java中的数据类型

Java是一个强类型语言,Java中的数据必须明确数据类型。在Java中的数据类型包括基本数据类型和引用数据类型两种。

Java中的基本数据类型:

数据类型关键字内存占用取值范围
整数byte1负的2的7次方 ~ 2的7次方-1(-128~127)
short2负的2的15次方 ~ 2的15次方-1(-32768~32767)
int4负的2的31次方 ~ 2的31次方-1
long8负的2的63次方 ~ 2的63次方-1
浮点数float41.401298e-45 ~ 3.402823e+38
double84.9000000e-324 ~ 1.797693e+308
字符char20-65535
布尔boolean1true,false

说明:

​ e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。

​ 在java中整数默认是int类型,浮点数默认是double类型。

main方法

image.png

4.4 变量(应用)

3.5.1 变量的定义

变量:在程序运行过程中,其值可以发生改变的量。

从本质上讲,变量是内存中的一小块区域,其值可以在一定范围内变化。

变量的定义格式:

数据类型 变量名 = 初始化值; // 声明变量并赋值
int age = 18;
System.out.println(age);

或者

// 先声明,后赋值(使用前赋值即可)
数据类型 变量名;
变量名 = 初始化值;
double money;
money = 55.5;
System.out.println(money);

还可以在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。

int a = 10, b = 20; // 定义int类型的变量a和b,中间使用逗号隔开
System.out.println(a);
System.out.println(b);

int c,d; // 声明int类型的变量c和d,中间使用逗号隔开
c = 30;
d = 40;
System.out.println(c);
System.out.println(d);

变量的使用:通过变量名访问即可。

3.5.2 使用变量时的注意事项
  1. 在同一对花括号中,变量名不能重复。
  2. 变量在使用之前,必须初始化(赋值)。
  3. 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
  4. 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。

4.5 关键字、标志符(记忆、理解)

关键字

Java自己保留的一些单词,作为特殊功能的,例如:public、class、byte、short、int、long、double…

我们不能用来作为类名或者是变量名称,否则报错。

注意:关键字很多,不用刻意去记。

abstractassertbooleanbreakbyte
casecatchcharclassconst
continuedefaultdodoubleelse
enumextendsfinalfinallyfloat
forgotoifimplementsimport
instanceofintinterfacelongnative
newpackageprivateprotectedpublic
returnstrictfpshortstaticsuper
switchsynchronizedthisthrowthrows
transienttryvoidvolatilewhile

标志符

标志符就是由一些字符、符号组合起来的名称,用于给类,方法,变量等起名字的规矩。

基本要求:由数字、字母、下划线(_)和美元符($)等组成

强制要求:不能以数字开头、不能是关键字、区分大小写

基本命令规范

变量名称:满足标识符规则,建议全英文、有意义、首字母小写,满足“驼峰模式”,例如:int studyNumber = 59。

类名称: 满足标识符规则,建议全英文、有意义、首字母大写,满足“驼峰模式”,例如:HelloWorld.java。

类型转换&运算符

Java基础语法.png

程序流程控制(if、switch、for、while、do-while、break、continue、Random类-随机数)

程序流程控制.png

数组

假如有个类Movie
可以创建个Movies数组,专门存储Movie的对象
Movies[] movies = new Movies[3];
int[] arr = new int[]{1,2,3}
int[] arr = {1,2,3}  //推荐这种写法
int arr[] = new int[]{1,2,3}
int arr[] = {1,2,3}

解析打印数组地址:[D@610455d6

[ 表示当前是一个数组
D 表示数组里面的元素都是double类型
@ 表示一个间隔符号(@是固定格式)
610455d6 数组真正的地址值(十六进制)

数组遍历的快捷键

数组名.fori

获取数组的长度

数组名.length

获取数组第i个元素

数组名[i]

数组默认初始化值的规律

整数类型: 默认初始化值为0
小数类型: 默认初始化值为0.0
字符类型: 默认初始化值为'\u0000' (即:空格)
布尔类型: 默认初始化值为false
引用数据类型: 默认初始化值为null

image.png

Java内存分配

栈: 方法运行时使用的内存,比如main方法运行,进入方法中执行
堆: 存储对象或者数组, 用new来创建,都存储在堆内存
方法区: 存储可以运行的class文件
本地方法栈: JVM在使用操作系统功能的时候使用,和我们开发无关
寄存器: 给CPU使用,和我们开发无关

方法

  • 方法是程序中最小的执行单元
  • 重复的代码、具有独立功能的代码可以抽取到方法中
  • 可以提高代码的复用性、可维护性

方法的定义

public static 返回值类型 方法名(参数1, 参数2) {
    //参数 = 类型 变量名
    方法体;
    return 返回值;
};

方法的调用

方法名();

方法的重载

在同一个类中,方法名相同(区分大小写),参数不同的方法.

  • 与返回值无关
  • 参数不同: 个数不同、类型不同、顺序不同

方法的重写

  • 子类继承父类,子类覆盖父类的方法称为重写。
  • 注意事项: 重写前后方法名相同;参数类型、顺序、个数相同; 返回值相同
- 重载是多态性的一种表现,重写的前提是继承,子类继承父类中虚方法表中的方法,
- 如果父类方法访问权限为private,那么子类就不能对其进行重载;
- 如果子类写了这个同名的方法,那只是定义了一个与父类方法相同的新方法,并不会发生重载。

方法传递参数:

  • 方法传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
  • 方法传递引用数据类型时,传递的是地址,形参的改变,会影响实际参数的值

image.png

break、continue、return区别

image.png

* break;
* 1,终止当前整个for循环,但是不影响for循环之后的代码执行
* 2,终止当前一次switch循环,但是不影响switch之后的代码执行
* (此时,breakcontinue效果一样,但是不推荐用continue)
* return; 终止当前整个方法
* continue; 结束for循环中某次的循环,continue之后的代码不再执行。

image.png image.png

image.png

关键字:private

private: 类中的变量用该关键字修饰,修改时可以加一些控制,比如年龄不能为负数.总之使用该关键字比较安全吧.
* 是一个权限修饰符
* 可以修饰成员变量和成员方法
* 被private修饰的成员变量和成员方法只能在本类中才能访问,所以要提供公开的get和set方法

this

  • this的本质:所在方法调用者的地址值
  • this的作用:区分局部变量和成员变量
  • this的内存原理 image.png
this:
* 获取成员变量的值. (this.name)
* 方法中没有被this修饰的变量是局部变量(name)
private String name; //成员变量
public void setName(String name) { //局部变量
    this.name = name;
    //等号左边是获取成员变量name,右边是获取局部变量name
}

构造方法

  • 特点:
- 方法名和类名相同,大小写也要一致
- 没有返回值类型,连void都没有
- 没有具体的返回值(不能由return带回结果数据)
  • 执行时机
- 创建对象的时候由虚拟机调用,不能手动调用构造方法
- 每创建一次对象,就会调用一次构造方法
  • 注意事项
- 任何类定义出来,默认就自带了无参数构造器,写不写都行,
- 但如果定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了,
- 建议在任何时候都手动写上空参和带全部参数的构造方法。
  • 格式&实例
//格式
public class Student {
    修饰符 类名(参数) {
        方法体
    }
    //空参构造
    public Student() {
    }
    //带参构造
    public Student(String name, int age) {
    }
}

JavaBean

也可以称为实体类,其对象可以用于在程序中封装数据

标准的JavaBean需满足如下书写要求:

1.成员变量使用private修饰
2.提供成员变量对应的get和set方法
3.必须提供一个无参构造器;有参数构造器可写可不写
注意:创建了有参构造器,默认的无参构造器需要手动添加,否则会报错

快捷键:

alt+insert 或 alt + Fn + insert 推荐插件PTG (在类中右键选择Ptg To JavaBean,1秒生成标准JavaBean)

内存图

  • 一个对象的内存图 image.png
  • 两个引用指向同一个对象 image.png

成员变量和局部变量的区别

image.png

字符串

  • String是引用类型,只是编译器对其做了特殊处理(使其和基本数据类型一样)。

字符串学习内容

String、StringBuilder、StringJonier、StringBuffer、Pattern、Matcher

常用API(String、ArrayList).png

String常用API
方法名
//说明
public int length​()
//返回此字符串的长度
public char charAt​(int index)
//获取某个索引位置处的字符
public char[] toCharArray​():
//将当前字符串转换成字符数组返回
public String substring(int beginIndex, int endIndex)
//根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int beginIndex)
//从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(CharSequence target,
CharSequence replacement)
//使用新值,将字符串中的旧值替换,得到新的字符串
public String[] split(String regex)
//根据传入的规则切割字符串,得到字符串数组返回
  • Java中String、StringBuilder、StringBuffer、Object等类如何使用equal()方法 image.png
  • List、ArrayList、Map如果使用equal()方法 image.png
  • 两个StringBuilder对象如何比较内容是否相等?
方式1(推荐):StringBuilderString,然后使用Stringequals()方法比较
方式2StringBuilder不支持被继承,所以只能通过自定义装饰类,内部使用StringBuilderString的方式实现

String字符串的内容不会发生改变,它的对象在创建后不能被更改

String name1 = "1";
String name2 = "2";
System.out.println(name1 + name2); //会创建一个新的字符串存储name1+name2
name1 = "3"; //这时候会创建一个新的字符串存储“3”,并不会修改name1的地址

创建字符串常见用法

image.png

- 以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。 
- 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。
String s1 = "abc"; //直接赋值获取一个字符串对象
String s2 = new String(); //空参构造,获取一个空白的字符串对象
String s3 = new String("abc"); //根据字符串,创建字符串对象
//字符数组创建字符串对象
char[] chs = {"a","b","c"};
String s4 = new String(chs);//abc
//字节数组创建字符串对象
byte[] bytes = {97,98,99,100};
String s5 = new String(bytes); //abcd

通过new构造器得到字符串对象--内存图

image.png

image.png

image.png

字符串用"=="比较

  • 基本数据类型:比的是数据值
  • 引用数据类型:比的是地址值 image.png

equals()和equalsIgnoreCase()

  • equals():区分大小写

  • equalsIgnoreCase():不区分大小写

  • 比较字符串内容是否相等Demo

String s1 = new String("abc");//s1记录堆中的地址值
String s2 = "Abc"; //s2记录字符串池中的地址值
System.out.println(s1==s2); //false
boolean result1 = s1.equals(s2);//false 
boolean result2 = s1.equalsIgnoreCase(s2);//true

StringBuilder

StringBuilder可以看成是一个容器,创建之后里面的内容是可变的

- 作用:
- 提高字符串的操作效率

- 使用场景:
- 1, 字符串的拼接
- 2, 字符串的反转

image.png

StringJoiner

  • StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的
  • 作用
  • 提高字符串的操作效率,而且代码编写特别简洁
  • JDK8出现的api
  • 用法:
public StringJoiner(间隔符) 
public StringJoiner(间隔符,开始符号,结束符号)
举例:
public StringJoiner(", ", "[", "]")

StringJoiner sj = new StringJoiner(", ", "[", "]");
sj.add("aaa").add("bbb").add("ccc");
System.out.println(sj.length); //15
System.out.println(sj);//[aaa, bbb, ccc]
String str = sj.toString();
System.out.println(str);//[aaa, bbb, ccc]
字符串原理小结

image.png

ArrayList集合
  • ArrayList是集合中的一种,支持索引
  • ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
  • 注意:
  • 集合中只能存储引用类型,不支持基本数据类型。但可以使用基本类型的包装类
  • 包装类举例:int改为Integer,char改为Character

image.png

//创建ArrayList对象
ArrayList list = new ArrayList();
ArrayList<String> :此集合只能操作字符串类型的元素。 
ArrayList<Integer>:此集合只能操作整数类型的元素。
    
public E get(int index)//返回指定索引处的元素
public int size()//返回集合中的元素的个数
public E remove(int index)//删除指定索引处的元素,返回被删除的元素
public boolean remove(Object o)//删除指定的元素,返回删除是否成功
public E set(int index,E element)//修改指定索引处的元素,返回被修改的元素
static

static.png

  • 同一个类中,访问静态方法,类名可以省略不写
  • 实例对象可以访问静态属性和静态方法(不推荐)

image.png image.png

  • static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
  • 被static修饰的成员变量,叫做静态变量
  • 被static修饰的成员方法,叫做静态方法
  • 特点
  • 被该类所有对象共享
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在
  • 调用方式
  • 类名调用(推荐)
  • 对象名调用

image.png

image.png

  • 注意事项
  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中没有this关键字

image.png 静态成员变量.png

代码块

image.png

单例

image.png

JavaBean类、测试类、工具类
  • JavaBean类
    • 用来描述一类事物的类.比如: Student,Teacher
  • 测试类
    • 用来检查其他类是否书写正确,带有main方法的类,是程序的入口
  • 工具类
    • 不是用来描述一类事物的,而是帮我们做一些事情的类
public class ArrUtil {
        //私有化构造方法,避免外部实例化ArrUtil类,
        //因为没有意义,内部的静态方法,直接用类调用即可
        private ArrUtil(){}
        public static int getMax(int[] arr){}
        public static int getMin(int[] arr){}
    }

继承

继承.png

  • 什么是继承,继承的好处是什么?

  • 继承是面向对象三大特征之一,可以让类跟类之间产生父子的关系

  • 可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码的复用性

  • 继承的格式

  • public class 子类 extends 父类 {}

  • 继承后子类的特点

  • 子类可以得到父类的属性和行为,子类可以使用

  • 子类可以在父类的基础上新增其他功能,子类更强大

  • 继承的特点

  • Java只能单继承: 一个类只能继承一个直接父类

  • Java不支持多继承,但支持多层继承

  • Java中所有的类都直接或者间接继承于Object类

  • 只有被添加到虚方法表中的方法才能被重写

  • 虚方法表包括:

  • 非private方法

  • 非static方法

  • 非final方法

  • 子类可以继承父类哪些内容? image.png

  • 继承中的成员变量和成员方法 image.png

  • 继承中:构造方法的访问特点

  • 父类中的构造方法不会被子类继承

  • 子类中所有的构造方法默认先访问父类中的无参构造,再执行自己

①为什么?
因为子类在初始化的时候,有可能会使用到父类中的数据,
如果父类没有完成初始化,子类将无法使用父类的数据
②怎么调用父类构造方法的?
- 子类构造方法的第一行语句默认都是: super(),不写也存在,且必须在第一行.
- 调用父类有参构造,必须手动写super进行调用
  • this、super使用总结
- this:理解为一个变量,表示当前方法调用者的地址值
- super:代表父类存储空间

image.png

扩展

键盘输入

image.png

随机数

1、导包(自动做的:) import java.util.Random;
2、创建随机数对象:Random r = new Random();
3、开始得到随机数 : int data = r.nextInt(10); //  0 - 9

获取10-30之间的随机数,方式一(推荐)

Random r = new Random();
// 10 - 30
for (int i = 0 ; i < 100; i++) {
    int data = r.nextInt(10 , 31);
    System.out.println(data);
}

方式二

image.png