#博学谷IT学习技术支持#
1-7 数组
07-数组介绍
数组就是存储数据长度固定的容器,用来存储同种数据类型的多个值
例如:int类型的数组容器(boolean byte short double)
08-数组的定义格式
数据类型[] 数组名
数据类型 数组名[]
09-数组的动态初始化
初始化
在内存中,为数组开辟空间,并将数据存入容器中的过程。
动态初始化
数组动态初始化就是只给定数组的长度,由系统给出默认初始化值
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
注意:打印数组变量名,出现的是数组在内存中的地址值
10-数组元素访问
数组名[索引];
11-Java内存分配-一个数组内存
记住两个内存,分别是:栈内存和堆内存
| 区域名称 | 作用 |
|---|---|
| 寄存器 | 给CPU使用 |
| 本地方法栈 | JVM在使用操作系统功能的时候使用 |
| 方法区 | 存储可以运行的class文件。 |
| 堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
| 方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行 |
13-多个数组指向相同内存
多个数组使用相同内存
int [] arr1 = new int[2];
arr1[0] = 11;
arr1[1] = 22;
int [] arr2 = arr1;
arr2[0] = 33;
system.out.println(arr1[0]); // 33
14-数组的静态初始化
静态初始化: 在创建数组时,指定数组要存储的元素,系统还会自动计算数组长度
完整版格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化版格式
数据类型[] 数组名 = {元素1,元素2,...};
15-数组操作的两个常见问题
1 索引越界异常
访问了数组中不存在的索引,造成索引越界
将会抛出ArrayIndexOutOfBoundsException 数组越界异常。
2 空指针异常
arr1 = null
访问的数组已经不再指向堆内存的数据,造成空指针异常
会抛出 NullPointerException 空指针异常
16-数组遍历
使用 arr.length
14-二维数组动态初始化
二维数组定义:
格式1:数据类型[] [] 变量名;
范例:int [] [] arr;
格式2:数据类型 变量名 [] [];
范式:int arr [] [];
格式3:数据类型[] 变量名[];
范式: int[] arr[];
15-二维数组访问元素的细节问题
print(arr) // [[I@asdf [[是二维数组
16-二维数组静态初始化
格式:数据类型[] [] 变量名 = new 数据类型[] [] {{1,2,3,},{45,67},...}
1-8 方法
01-方法概述
方法(method)是将具有独立功能的代码块,可以提高代码的复用性
02-方法的定义和调用
// 定义
public static void 方法名 ( ) {
// 方法体;
}
public static void method ( ) {
// 方法体;
}
// 调用格式:
方法名();
method();
05-带参数方法的定义和调用
参数:由数据类型和变量名组成 - 数据类型 变量名
public static void 方法名 (参数1) {
方法体;
}
public static void 方法名 (参数1, 参数2, 参数3...) {
方法体;
}
public static void isEvenNumber(int number){
...
}
public static void getMax(int num1, int num2){
...
}
方法名(参数);
方法名(参数1,参数2);
isEvenNumber(10);
getMax(10,20);
06-形参和实参
-
形参:方法定义中的参数,等同于变量定义格式
-
实参:方法调用中的参数,等同于使用变量或常量
08-带返回值方法的定义和调用
public static 数据类型 方法名 ( 参数 ) {
return 数据 ;
}
public static boolean isEvenNumber( int number ) {
return true ;
}
public static int getMax( int a, int b ) {
return 100 ;
}
方法名 ( 参数 ) ;
数据类型 变量名 = 方法名 ( 参数 ) ;
isEvenNumber ( 5 ) ;
boolean flag = isEvenNumber ( 5 );
注意:java 的 return 只能返回一个参数
10-方法通用格式
public static 返回值类型 方法名(参数) {
...;
return 数据 ;
}
方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应 的数据类型
11-方法的注意事项
方法不能嵌套定义
void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
12-方法重载
方法重载概念
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数不相同,类型不同或者数量不同 、
顺序不同
注意:
重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
14-方法参数传递基本数据类型
基本数据类型的参数,形式参数的改变,不影响实际参数
结论依据: 每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失
15-方法参数传递引用数据类型
对于引用类型的参数,形式参数的改变,影响实际参数的值
结论依据: 引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存。所以即使方法弹栈,堆内存中的数据也已经是改变后的结果
16-数组遍历
public static void main(String[] args) {
//定义数组 int[] arr = {11, 22, 33, 44, 55};
//使用通用的遍历格式
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
}
1-9 进制
04-进制的介绍与书写格式
进制:是进位计数制,是人为定义的带进位的计数方法
常见进制:二进制、八进制、十六进制
书写格式:
java中,数值都默认是10进制,不需要修饰。
二进制:0b开头,b大小写不分;
八进制:0开头;
十六进制:0x开头。
注意:print都是10进制
05-任意进制到十进制的转换
公式:系数*基数的权次幂相加。
- 系数:每一【位】上的数
- 基数:几进制,基数就是几
- 权:从数值的右侧开始,以0开始,逐个加+1
06-进制转换-十进制到任意进制转换
公式:除基取余
使用源数据,不断的除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。
07-快速进制转换法
8421码
二进制快速转八:三个二进制位看成一组
二进制快速转十六:四个二进制位看成一组
08-原码反码补码
注意:计算机中的数据,都是以二进制补码的形式在运行,而补码则是通过反码和源码推算出来。
-
源码(可直观看出数据大小)
- 二进制定位表示法,最高位为符号位,【0】正,【1】负,其余位表示数值的大小
-
反码
- 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外
-
补码(数据以该状态进行运算)
- 正数的补码与其原码相同;负数的补码是其反位的末尾加1
09-位运算-基本位运算符
& 位与
| 位或
^ 位异或
~ 全部取反
10-位运算-位移运算符
>> 有符号右移,使用符号位进行补齐
<< 有符号左移,符号位丢弃,右边补齐
>>> 无符号右移,补0
11-数据交换
a = a^b
b = a^b
a = a^b
2 面向对象基础
01-面向过程和面向对象思想对比
面向过程编程(Procedure Oriented Programming)
面向对象编程(Object Oriented Programming)
02-类和对象的关系
类是对现实生活中一类具有共同属性和行为的事物的抽象
类和对象的关系
类:类是对象的描述
对象:对象是类的实体
03-类的定义
类的组成:属性和行为
属性:成员变量
行为:成员方法
04-对象的创建和使用
创建对象的格式:
类名 对象名 = new 类名();
调用成员的格式:
- 对象名.成员变量
- 对象名.成员方法();
07-两个对象内存
两个对象是同一个时,不需要再加载 .class字节码文件。
08-两个引用指向同一个对象内存
垃圾回收:
当堆内存中,对象和数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的垃圾;
垃圾会被java垃圾回收器空闲时自动清理
09-成员变量和局部变量的区别
| 区别 | 成员变量 | 局部变量 |
|---|---|---|
| 类中位置不同 | 类中方法外 | 方法内部或方法声明上 |
| 内存中位置不同 | 堆内存 | 栈内存 |
| 生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而 存在,醉着方法的调用完毕而消失 |
| 初始化值不同 | 有默认初始化值 | 没有默认初始化值,必须先定义,赋值才能使用 |
10-private关键字
概述 : private是一个修饰符
特点 : 被private修饰的成员,只能在本类进行访问
11-private关键字的使用
private int age;
setAge(int n);
getAge()
12-this关键字
this代表所在类的对象引用
14-封装
面向对象三大特征之一(封装,继承,多态)
隐藏实现细节,对外暴露公共方法
体现:
- 将代码抽取到方法中,这是对代码的一种封装
- 将属性抽取到类中,这是对数据的一种封装
好处:提高安全性、性复用性
15-构造方法的格式和执行时机
格式注意 :
- 方法名与类名相同,大小写也要一致
- 没有返回值类型,连void都没有
- 没有return
执行时机 :
- 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
- 不能手动调用构造方法
16-构造方法的作用
- 用于给对象的数据(属性)进行初始化
17-构造方法的注意事项
构造方法的创建 :
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
构造方法的重构 :
如果自定义了带参构造方法,还要用无参构造方法,就必须再写一个
推荐的使用方式 :
无论是否使用,都手动书写无参数构造方法,和带参数构造方法
18-标准类的代码编写和使用
- 成员变量
- 使用private修饰
- 构造方法
- 提供一个无参构造方法
- 提供一个带多个参数的构造方法
- 成员方法
- 提供每个成员变量对应的getxx()/setxx()
- 提供show()
- 创建对象并为成员变量赋值的两种方式
- 无参构造方法创建对象后使用setXxx()赋值
- 使用带构造方法直接创建带有属性值的对象
3 API基础
01-API概述-帮助文档的使用
API 概述
API (Application Programming Interface) :应用程序编程接口
使用 api 帮助文档:
- 找到索引选项卡中的输入框 输入Random
- 看类在哪个包下
- 看类的描述
- 看构造方法
- 看成员方法
java.lang 下不需要导包
3-1 String类
03-String概述
String 类代表字符串 Java 程序 中所有的双引号字符串,都是 String 类的对象
字符串不可变,它们的值在创建后不能被更改
04-String类常见构造方法
05-创建字符串对象的区别对比
字符串常量池
当使用双引号创建字符串对象的时候,系统会检查字符串是否在字符串常量池中,
不存在:创建,存在:复用
- 通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
- 直接赋值方式创建
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一 个 String 对象,并在字符串池中维护
06-String特点-常见面试题
"abc" == s2+"c" // false
当字符串之间使用+ 拼接. 系统底层会创建一个StringBuilder对象
然后再调用append方法完成拼接,拼接完成后再调用toString 方法转换为String类型
"abc" == "a"+"b"+"c" // true
07-字符串的比较
equals
09-字符串的遍历
获取字符 .charAt(n)
char[] toCharArray()
11-手机号屏蔽-字符串截取
String substring(int beginIndex, int endIndex)
String substring(int beginIndex)
12-敏感词替换-字符串替换
String replace(CharSwquence target, CharSequence replacement)
旧换新值,返回新字符串
13-切割字符串
String[] split(String regex) : 根据传入的字符串作为分隔符进行切割,并返回字符串数组
14-String方法小结
- public int length() 返回此字符串的长度 public char charAt(int index) 返回指定索引处的 char 值
- public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写
- public boolean equalsIgnoreCase(String anotherString) 比较字符串的内容,忽略大小写
- 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) 根据传入的规则切割字符串,得到字符串数组
15-StringBuilder概述
StringBuilder 是一个可变的字符串类,可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的
作用:提高字符串的操作效率
16-StringBuilder的构造方法
| 方法名 | 说明 |
|---|---|
| public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
| public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
17-StringBuilder常用的成员方法
| 方法名 | 说明 |
|---|---|
| public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
| public StringBuilder reverse() | 返回相反的字符序列 |
18-StringBuilder提高效率的原理
- String:
- 内容不可变
- 修改创建StringBuilder对象再toString
- StringBuilder:内容可变
19-对称字符串案例-String和StringBuilder之间的转换
-
StringBuilder转换为String
- public String toString():通过 toString() 就可以实现把
-
StringBuilder 转换为 String String转换为StringBuilder
- public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
4 集合
01-集合和数组的区别对比
集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
集合和数组的区别 :
- 共同点:都是存储数据的容器
- 不同点:数组的容量是固定的,集合的容量是可变的
02-ArrayList的构造方法和添加方法
| 方法 | 作用 |
|---|---|
| public ArrayList() | 创建一个空的集合对象 |
| public boolean add(E) | 将指定的元素追加到此集合的末尾 |
| public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
ArrayList <E>:
- 可调整大小的数组实现
- <E>是一种特殊的数据类型,泛型。
注意:集合容器如果没有加入<> 就可以储存任意类型
<> 泛型:对集合容器存储的数据类型进行限制
03-ArrayLIst常用成员方法
| 方法 | 作用 |
|---|---|
| public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
| public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
| public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
| public E get(int index) | 返回指定索引处的元素 |
| public int size() | 返回集合中的元素的个数 |