1.对象内存图
1.1 Java 内存分配
1.2 堆和栈
栈:所有局部变量都会在栈内存中创建
局部变量:定义在方法中的变量或者方法声明上的变量
方法执行都会加载到栈中进行
-----------------------------------------------------------------------------------------------------------------------
堆:所有对象及其对应的实例变量和数组都将存储在此处
简单理解为:new出来的东西,都存储在堆内存
每一个new出来的东西都有一个地址值,使用完毕, 会在垃圾回收器空闲时被回收
实例变量(成员变量)有初始化值:
基本数据类型:整数:0,浮点数:0.0,布尔:false,字符:空字符
引用数据类型:null==string 数组
2.private权限修饰符
被private修饰的成员在**本类**中可以通过 实例对象.属性名进行访问。
针对 **private** 修饰的成员变量,如果需要被其他类使用,提供两个相应的操作:
get变量名(),用于获取成员变量的值,方法用 public修饰
set变量名(参数),用于设置成员变量的值,方法用 public修饰
3.this
局部变量和成员变量名字一致,局部变量赋值给成员变量。
this限定的变量用于指代成员变量
方法被哪个对象调用,this就代表哪个对象
4.封装:隐藏事物具体的实现细节
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性
快捷方式:alt+insert 选择getterAndSetter
5.构造方法
作用:创建对象时默认调用的方法 常用于对象数据的初始化
javaBean步骤
1将属性进行私有化
2提供一个公共的get和set方法
3提供一个无参构造函数
4提供一个全参的构造函数(可选 javase阶段先写上)
5重写toString hashCode和equals方法
6.继承:;子类继承父类的属性和方法
6.1格式:
public class 子类名 extends 父类名 { }
子类的构造方法执行时会先走父类的构造方法 第一句默认加一个super()
6.2继承的访问特性
成员变量的访问特性 -- 就近原则
继承的子类访问父类属性和方法 super
继承中成员方法的访问特点 -- 就近原则
方法重写 - 子类对父类方法重写
子类可以有自己的特有的成员变量和方法
好处:增强代码复用性
坏处:增强类的耦合性
6.3继承的访问特性-super关键字
super:代表父类存储空间的标识(可以理解为父类对象引用)
关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |
this | this.成员变量访问本类成员变量 | this(…)访问本类构造方法 | this.成员方法(…)访问本类成员方法 |
super | super.成员变量访问父类成员变量 | super(…)访问父类构造方法 | super.成员方法(…)访问父类成员方法 |
7.方法重写
@Override
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
类 | 方法名 | 参数 | 返回值类型 | |||
重写 | 不同类中(有继承关系或实现关系) | 相同 | 相同 | 相同 | 子类声明的异常范围不小于父类 | 代码内容不同 |
重载 | 同一类中 | 相同 | 类型/顺序/个数不同 | 无关 |
8.修饰符
8.1权限修饰符
修饰符 | 同一个类中 | 同一个包中 | 不同包,但父子关系 | 不同包的无关类 |
private | √ | |||
default默认 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
8.2状态修饰符
8.2.1static(静态) 共享
static 静态修饰为所有对象使用 关键字是静态的意思,可以修饰成员方法,成员变量
静态成员方法只能访问静态成员,创建对象除外
① 被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
② 可以通过类名调用,也可以通过对象名调用,推荐使用类名调用
8.2.2final(最终态)
修饰方法:表明该方法是最终方法,不能被重写
修饰变量:表明该变量是常量,不能再次被赋值
修饰类:表明该类是最终类,不能被继承
使用场景 常量、π、重力加速度g等不变的成员变量 工具类 最终方法
9创建工具类
①构造方法私有化
②方法设成静态
public class ArrayUtils {//1构造方法私有化 代表不能创建对象private ArrayUtils() {}//2将所有方法设置成静态方法//冒泡排序public static int[] maopao(int[]arr){int temp;for (int i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-1; j++) {if (arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}return arr;}
}
//测试类
import java.util.Arrays;
public class Text {public static void main(String[] args) {int []arr={4,3,2,1};ArrayUtils.maopao(arr);System.out.println(Arrays.toString(arr));}
}