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的运行环境和虚拟机。
1.4 JDK的下载和安装(应用)
1.4.1 下载
通过官方网站获取JDK
注意:针对不同的操作系统,需要下载对应版本的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相关命令可以在任意目录下使用。
- 设置环境变量的位置和原理
注意:目前较新的JDK安装时会自动配置javac、java命令的路径到Path环境变量中去 ,所以javac、java可以直接使用。
但是以前下载的老版本的JDK是没有自动配置的,此时必需要自己配置Path环境变量。
①JAVA_HOME:告诉操作系统JDK安装在了哪个位置(未来其他技术要通过这个找JDK)
②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创建一个普通的项目
3.2导入模块
3.3完全卸载模块
- 先在磁盘中删除模块(此时创建同名模块,可能会提示该模块已存在)
- idea中右键任一模块,彻底删除模块
- 再次创建同名的模块可能会无法识别为模块
4. java基础语法
4.1 注释(理解)
注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。Java中的注释分为三种:
单行注释。单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释文字。
// 这是单行注释文字
多行注释。多行注释的格式是使用/* 和 */将一段较长的注释括起来。
/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
注意:多行注释不能嵌套使用。
文档注释。文档注释以/**开始,以*/结束。(以后讲)
4.2 字面量(应用)
作用:告诉程序员,数据在程序中的书写格式。
| 字面量类型 | 说明 | 程序中的写法 |
|---|---|---|
| 整数 | 不带小数的数字 | 666,-88 |
| 小数 | 带小数的数字 | 13.14,-5.21 |
| 字符 | 必须使用单引号,有且仅能一个字符 | ‘A’,‘0’, ‘我’ |
| 字符串 | 必须使用双引号,内容可有可无 | “HelloWorld”,“黑马程序员” |
| 布尔值 | 布尔值,表示真假,只有两个值:true,false | true 、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中的基本数据类型:
| 数据类型 | 关键字 | 内存占用 | 取值范围 |
|---|---|---|---|
| 整数 | byte | 1 | 负的2的7次方 ~ 2的7次方-1(-128~127) |
| short | 2 | 负的2的15次方 ~ 2的15次方-1(-32768~32767) | |
| int | 4 | 负的2的31次方 ~ 2的31次方-1 | |
| long | 8 | 负的2的63次方 ~ 2的63次方-1 | |
| 浮点数 | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
| double | 8 | 4.9000000e-324 ~ 1.797693e+308 | |
| 字符 | char | 2 | 0-65535 |
| 布尔 | boolean | 1 | true,false |
说明:
e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。
在java中整数默认是int类型,浮点数默认是double类型。
main方法
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 使用变量时的注意事项
- 在同一对花括号中,变量名不能重复。
- 变量在使用之前,必须初始化(赋值)。
- 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
- 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。
4.5 关键字、标志符(记忆、理解)
关键字
Java自己保留的一些单词,作为特殊功能的,例如:public、class、byte、short、int、long、double…
我们不能用来作为类名或者是变量名称,否则报错。
注意:关键字很多,不用刻意去记。
| abstract | assert | boolean | break | byte |
|---|---|---|---|---|
| case | catch | char | class | const |
| continue | default | do | double | else |
| enum | extends | final | finally | float |
| for | goto | if | implements | import |
| instanceof | int | interface | long | native |
| new | package | private | protected | public |
| return | strictfp | short | static | super |
| switch | synchronized | this | throw | throws |
| transient | try | void | volatile | while |
标志符
标志符就是由一些字符、符号组合起来的名称,用于给类,方法,变量等起名字的规矩。
基本要求:由数字、字母、下划线(_)和美元符($)等组成
强制要求:不能以数字开头、不能是关键字、区分大小写
基本命令规范
变量名称:满足标识符规则,建议全英文、有意义、首字母小写,满足“驼峰模式”,例如:int studyNumber = 59。
类名称: 满足标识符规则,建议全英文、有意义、首字母大写,满足“驼峰模式”,例如:HelloWorld.java。
类型转换&运算符
程序流程控制(if、switch、for、while、do-while、break、continue、Random类-随机数)
数组
假如有个类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
Java内存分配
栈: 方法运行时使用的内存,比如main方法运行,进入方法中执行
堆: 存储对象或者数组, 用new来创建,都存储在堆内存
方法区: 存储可以运行的class文件
本地方法栈: JVM在使用操作系统功能的时候使用,和我们开发无关
寄存器: 给CPU使用,和我们开发无关
方法
- 方法是程序中最小的执行单元
- 重复的代码、具有独立功能的代码可以抽取到方法中
- 可以提高代码的复用性、可维护性
方法的定义
public static 返回值类型 方法名(参数1, 参数2) {
//参数 = 类型 变量名
方法体;
return 返回值;
};
方法的调用
方法名();
方法的重载
在同一个类中,方法名相同(区分大小写),参数不同的方法.
- 与返回值无关
- 参数不同: 个数不同、类型不同、顺序不同
方法的重写
- 子类继承父类,子类覆盖父类的方法称为重写。
- 注意事项: 重写前后方法名相同;参数类型、顺序、个数相同; 返回值相同
- 重载是多态性的一种表现,重写的前提是继承,子类继承父类中虚方法表中的方法,
- 如果父类方法访问权限为private,那么子类就不能对其进行重载;
- 如果子类写了这个同名的方法,那只是定义了一个与父类方法相同的新方法,并不会发生重载。
方法传递参数:
- 方法传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
- 方法传递引用数据类型时,传递的是地址,形参的改变,会影响实际参数的值
break、continue、return区别
* break;
* 1,终止当前整个for循环,但是不影响for循环之后的代码执行
* 2,终止当前一次switch循环,但是不影响switch之后的代码执行
* (此时,break和continue效果一样,但是不推荐用continue)
* return; 终止当前整个方法
* continue; 结束for循环中某次的循环,continue之后的代码不再执行。
类
关键字:private
private: 类中的变量用该关键字修饰,修改时可以加一些控制,比如年龄不能为负数.总之使用该关键字比较安全吧.
* 是一个权限修饰符
* 可以修饰成员变量和成员方法
* 被private修饰的成员变量和成员方法只能在本类中才能访问,所以要提供公开的get和set方法
this
- this的本质:所在方法调用者的地址值
- this的作用:区分局部变量和成员变量
- this的内存原理
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)
内存图
- 一个对象的内存图
- 两个引用指向同一个对象
成员变量和局部变量的区别
字符串
- String是引用类型,只是编译器对其做了特殊处理(使其和基本数据类型一样)。
字符串学习内容
String、StringBuilder、StringJonier、StringBuffer、Pattern、Matcher
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()方法
- List、ArrayList、Map如果使用equal()方法
- 两个StringBuilder对象如何比较内容是否相等?
方式1(推荐):StringBuilder转String,然后使用String的equals()方法比较
方式2:StringBuilder不支持被继承,所以只能通过自定义装饰类,内部使用StringBuilder转String的方式实现
String字符串的内容不会发生改变,它的对象在创建后不能被更改
String name1 = "1";
String name2 = "2";
System.out.println(name1 + name2); //会创建一个新的字符串存储name1+name2
name1 = "3"; //这时候会创建一个新的字符串存储“3”,并不会修改name1的地址
创建字符串常见用法
- 以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
- 通过构造器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构造器得到字符串对象--内存图
字符串用"=="比较
- 基本数据类型:比的是数据值
- 引用数据类型:比的是地址值
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, 字符串的反转
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]
字符串原理小结
ArrayList集合
- ArrayList是集合中的一种,支持索引
- ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
- 注意:
集合中只能存储引用类型,不支持基本数据类型。但可以使用基本类型的包装类包装类举例:int改为Integer,char改为Character
//创建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表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
被static修饰的成员变量,叫做静态变量被static修饰的成员方法,叫做静态方法- 特点
被该类所有对象共享不属于对象,属于类随着类的加载而加载,优先于对象存在- 调用方式
类名调用(推荐)对象名调用
- 注意事项
静态方法只能访问静态变量和静态方法非静态方法可以访问静态变量或静态方法,也可以访问非静态的成员变量和非静态的成员方法静态方法中没有this关键字
代码块
单例
JavaBean类、测试类、工具类
- JavaBean类
- 用来描述一类事物的类.比如: Student,Teacher
- 测试类
- 用来检查其他类是否书写正确,带有main方法的类,是程序的入口
- 工具类
- 不是用来描述一类事物的,而是帮我们做一些事情的类
public class ArrUtil {
//私有化构造方法,避免外部实例化ArrUtil类,
//因为没有意义,内部的静态方法,直接用类调用即可
private ArrUtil(){}
public static int getMax(int[] arr){}
public static int getMin(int[] arr){}
}
继承
-
什么是继承,继承的好处是什么?
-
继承是面向对象三大特征之一,可以让类跟类之间产生父子的关系 -
可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码的复用性 -
继承的格式
-
public class 子类 extends 父类 {} -
继承后子类的特点
-
子类可以得到父类的属性和行为,子类可以使用 -
子类可以在父类的基础上新增其他功能,子类更强大 -
继承的特点
-
Java只能单继承: 一个类只能继承一个直接父类 -
Java不支持多继承,但支持多层继承 -
Java中所有的类都直接或者间接继承于Object类 -
只有被添加到虚方法表中的方法才能被重写
-
虚方法表包括:
-
非private方法 -
非static方法 -
非final方法 -
子类可以继承父类哪些内容?
-
继承中的成员变量和成员方法
-
继承中:构造方法的访问特点
-
父类中的构造方法不会被子类继承 -
子类中所有的构造方法默认先访问父类中的无参构造,再执行自己
①为什么?
因为子类在初始化的时候,有可能会使用到父类中的数据,
如果父类没有完成初始化,子类将无法使用父类的数据
②怎么调用父类构造方法的?
- 子类构造方法的第一行语句默认都是: super(),不写也存在,且必须在第一行.
- 调用父类有参构造,必须手动写super进行调用
- this、super使用总结
- this:理解为一个变量,表示当前方法调用者的地址值
- super:代表父类存储空间
扩展
键盘输入
随机数
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);
}