一、方法
1.static A 方法(静态方法):
类加载的时候,会把所以Static资源全部加载到虚拟机里。
同一个类下----->A();
不同类下----->类名.A(); 或者 对象名.A();
2.A 方法(普通方法):后续更新
静态方法/变量/代码块:A.提前加载 B.归类所拥有【谁拥有,谁调用】
非静态方法/变量/代码块:A.现用现加载 B.归类下的某一个具体对象所拥有【谁拥有,谁调用】
二、方法重载
1.定义:
【同一个类下】,【方法名相同】,【参数列表不同(数量不同,类型不同,位置不同)】
【与方法名 修饰符 参数名 无关】的【两个或者两个以上】的方法叫重载。
(同一个类下,方法名相同,参数不完全相同的多个方法叫重载)
2.重载的好处--学习重载的原因?
a.方法定义的时候:相同功能,方法名相同;使用重载方法后,开发者不用再绞尽脑汁起方法名
b.方法调用的时候:程序/计算机 会自动根据调用者传入的参数列表,执行对相应的方法(不需要开发者选择,节省开发时间)
3.可变参数
为了看懂别人的代码,开发时候不推荐使用(用数组或者集合来平替)
为什么要学习可变参数?---->为了解决一部分方法重载的问题
可变参数实例:
public int sum(int...nums){
//使用的时候把可变参当成一个数组 可以直接使用数组或者集合
int sum=0;
for(int i =0;i<nums.length;i++){
sum+=nums[i];
}
sout(nums.length+"个数相加")
return sum;
}
4.注意
可变参数和其他数据一起作为形参的时候,可变参数一定要放在最后
二、补充:形参与实参
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 类名();
类名:表示你要实例化的类的名称。例如,如果有一个名为 Person 的类,那么 类名 就是 Person。
对象名:是你给新创建的对象起的名字,用于在程序中引用这个对象。例如,你可以将对象命名为 person1。
new 类名():这是创建对象的关键部分。new 是关键字,用于创建一个新的对象实例。类名() 是调用类的构造方法,用于初始化新创建的对象。括号内可以传递参数,具体取决于类的构造方法定义。
综合起来,类名 对象名 = new 类名(); 的含义是:
创建一个 类名 类的新实例。
通过 new 类名() 调用该类的构造方法来初始化这个新实例。
将新创建的对象引用赋值给变量 对象名,以便后续可以通过这个变量来访问和操作对象。
例如:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Person person1 = new Person("张三");
Person 是类名。
person1 是对象名。
new Person("张三") 创建了一个新的 Person 对象,并传入参数 "张三" 来初始化 name 属性。
person1 现在引用了这个新创建的 Person 对象
七 、局部变量和成员变量的区别
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.创建包--设置包名:
a.包名必须全小写;
b.通过 .符号 表示包的包含关系;
c.包名一般是域名倒置,加上模块名;
d.包名 不要使用系统关键字:nul,con,com1--com9
2.声明包: package com.jr.demo4.student;
----指定当前资源所在的包的位置
3.导入包: import java.util.Scanner;
静态导入【了解】: import static java.lang.Math.*;
----适用用在,某一类下,所有资源都是static
十一、 代码块(了解)
1.作用:缩小/限定 变量的作用域范围。
2.代码块的分类:
普通代码块(在方法里),
构造代码块(在方法外,做初始化的逻辑处理),
静态代码块(在方法外, 对静态资源做逻辑处理),
同步代码块(重点)===多线程的时候,讲!