一、方法
类加载的时候,会把所以Static资源全部【加载】到虚拟机里;
static A 方法(静态方法):同一个类下----->A(); 不同类下----->类名.A(); 或者 对象名.A();
A 方法(普通方法):后续更新
静态方法/变量/代码块:A.提前加载 B.归类所用有【谁拥有,谁调用】
非静态方法/变量/代码块:A.现用现加载 B.归类 下的某一个具体对象所拥有【谁拥有,谁调用】
1.方法的重载
a.定义:【同一个类下】,【方法名相同】,【参数列表不同(数量不同,类型不同,位置不同)】
【与方法名 修饰符 参数名 无关】的【两个或者两个以上】的方法叫重载。
b.学习重载的原因?重载的好处
1.方法定义的时候:相同功能,方法名相同;使用重载方法后,开发者不用再绞尽脑汁起方法名
2.方法调用的时候:程序/计算机 会自动根据调用者传入的参数列表,执行对相应的方法(不需要开发者选择,节省开发时间)
c.可变参数 :为了看懂别人的代码,开发时候不推荐使用(用数组或者集合来平替)
为什么要学习可变参数?---->为了解决一部分方法重载的问题
可变参数实例:
public int sum(int...nums){
//使用的时候把可变参当成一个数组 可以直接使用数组或者集合
int sum=0;
for(int i =0;i<nums.length;i++){
sum+=nums[i];
}
sout(nums.length+"个数相加")
return sum;
}
d.注意:可变参数和其他数据一起作为形参的时候,可变参数一定要放在最后
二、补充:形参与实参
1.形参:用于 接收/调用 函数时传递实际参数值
public void add(int a, int b) {
// a 和 b 是形参
}
2.实参:调用函数时传递的具体值
add(3, 4); // 3 和 4 是实参
三、Arrays工具类===方法操作数组
int[] nums={12,6,93,77,53,84,13};
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
System.out.println(Arrays.binarySearch(nums,77));
四、二维数组
1.一维数组:int[] nums={11,23,345,5676,99};
直接存储元素的数组,叫一维数组
2.二维数组:int[][] nums={{11,23,345},{5676,99},{},{},{}};
存储数组的数组,就叫二维数组!
//1.怎么存?
//声明二维数组
int[][] array;
//动态初始化
array = new int[3][4];
//静态初始化
// 创建一个 3 行 4 列的二维数组
int[][] array = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
//2.怎么取?
//访问单个元素
int element = array[0][1];
System.out.println("Element at [0][1]: " + element);
//遍历二维数组
for (int i = 0; i < array.length; i++) { // 遍历行
for (int j = 0; j < array[i].length; j++) { // 遍历列
System.out.print(array[i][j] + " ");
}
System.out.println();
}
五、面向对象思维:利于团队合作:项目后期修改,维护成本比较低!
a.面向过程---->面向对象
执行者: 面向过程 要干什么怎么干 (维护成本高)
领 导: 面向对象 (谁?拥有什么样的方法,能干什么活)
===>宏观上是使用面向对象,微观上还是面向过程
b.使用“面向对象”思维,开发程序的步骤
【创建/定义 类】
第一步:确定程序当中的参与者:
第二步:确定参与者应该具备的【属性】:
第三步:确定参与者应该具备的【行为(方法)】:
【使用类】
第四步: 类名 对象名=new 类名();
对象名.属性=值;
对象名.方法();
六、类和对象的关系
类是抽象的,类似一个模板,类是定规则的。
对象是具体的,真实存在的,对象是来遵守规则的。
====>一个类可以有很多个对象
类名 对象名=new 类名();
七 、局部变量和成员变量的区别
1.声明变量的位置不同:
局部变量:在方法里声明的就是局部变量
成员变量:在方法外声明的就是成员变量
2.作用域范围不一样:
局部变量: 从声明变量的那行开始到包裹的大括号结束。
成员变量:本类下任何一个位置都可以,其他类下,创建对象,对象,成员变量
3.生命周期不一样:
局部变量:从声明变量,到方法执行完
成员变量:从new对象开始,-----1.项目关闭2.垃圾回收
4.默认值不一样:
局部变量:没有默认值,开发者必须赋值才可以使用
成员变量:程序会给一个 默认值
String---null(空地址) int----0;double-----0.0;boolean----false
5.初始化不一样:局部变量必须初始化;全局变量系统帮忙初始化
6.局部变量的优先级高:
局部变量和成员变量同名了,局部变量的优先级高,近水楼台先得月
八、构造方法
1.特点
a.方法名跟类名相同 一模一样
b.方法 没有返回值
c.开发者如果不创建,程序会自动帮忙创建一个公有的无参,方法体为空的 构造方法
d. . 普通方法();
new 构造方法():
2.构造方法作用/好处
a.实例化 : 创建一个对象 (没有构造方法就不能创建对象)
b.初始化 : 为对象的属性赋初始值(第一个值)
3.构造方法运行原理
①如果我们没有手动创建构造方法, 那么程序会自动帮忙创建一个public ,无参的,方法体为空的构造方法。
②如果我们手动创建了构造方法,那么程序将不会在提供构造方法了。
③如果开发者还想使用 public ,无参的,方法体为空的构造方法 ,只能自己创建了。
九 、封装
1.“面向对象”思想(面向对象思维的三大特征): 封装 继承 多态 | 反射
什么是封装? ---->用public 的赋值,取值方法,间接访问private属性
为什么要封装?---->限制输入条件,增加安全性
十、包
分类的存储文件;区分同名文件;不存在 不在包里的文件
1.创建包
设置包名:
1.包名必须全小写;
2.通过 .符号 表示包的包含关系;
3.包名一般是域名倒置,加上模块名;
4.包名 不要使用系统关键字:nul,con,com1--com9
2.声明包: package com.jr.demo4.student;
----指定当前资源所在的包的位置
3.导入包: import java.util.Scanner;
静态导入【了解】: import static java.lang.Math.*;
----适用用在,某一类下,所有资源都是static
十一、 代码块(了解)
1.作用:缩小/限定 变量的作用域范围。
2.代码块的分类:
普通代码块(在方法里),
构造代码块(在方法外,做初始化的逻辑处理),
静态代码块(在方法外, 对静态资源做逻辑处理),
同步代码块(重点)===多线程的时候,讲!