Java基础学习总结(数组、方法、进制、面向对象基础、API基础、集合)

230 阅读12分钟

#博学谷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-形参和实参

  1. 形参:方法定义中的参数,等同于变量定义格式

  2. 实参:方法调用中的参数,等同于使用变量或常量

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-标准类的代码编写和使用

  1. 成员变量
  • 使用private修饰
  1. 构造方法
  • 提供一个无参构造方法
  • 提供一个带多个参数的构造方法
  1. 成员方法
  • 提供每个成员变量对应的getxx()/setxx()
  • 提供show()
  1. 创建对象并为成员变量赋值的两种方式
  • 无参构造方法创建对象后使用setXxx()赋值
  • 使用带构造方法直接创建带有属性值的对象

3 API基础

01-API概述-帮助文档的使用

API 概述

API (Application Programming Interface) :应用程序编程接口

使用 api 帮助文档:

  1. 找到索引选项卡中的输入框 输入Random
  2. 看类在哪个包下
  3. 看类的描述
  4. 看构造方法
  5. 看成员方法

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:
  1. 内容不可变
  2. 修改创建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()返回集合中的元素的个数