一、方法的重载
1、满足条件之一:方法名称相同、参数列表(类型)不同或个数不同,与返回值与修饰符无关
2、作用:多用于相似功能,减少名称的使用个数 使用方法的重载 jdk例子:println() 打印
package qf22020212;
public class Demo02 {
public static void main(String[] args) {
add1(1, 2);
System.out.println(add1(1, 2, 4));
System.out.println(add1(1.0, 2.0));
}
public static void add1(int a, int b) {
System.out.println(a + b);
}
public static int add1(int a, int b, int c) {
return a + b + c;
}
public static double add1(double a, double b) {
return a + b;
}
}
二、方法的重写
1、满足条件:方法名和参数列表必须相同、返回值、返回修饰符有关,即内容可以改变。 核心重写!
2、作用:其子类的使用父类的方法时,抽取共性方法,同时想添加点自己的东西,这时可以使用重写。如果想使用回父类的方法,使用super()调用父类原方法
package qf22020212;
public class Demo05 {
public static void main(String[] args) {
Animal animal1 = new Cat();
Animal animal2 = new Dog();
animal1.run(5);
animal2.run(10);
}
}
class Animal {
public void run(int m) {
System.out.println("走" + m + "米");
}
}
class Cat extends Animal {
@Override
public void run(int m) {
System.out.println("猫在走" + m + "米");
}
}
class Dog extends Animal {
@Override
public void run(int m) {
//调用父类的原方法
super.run(m);
}
}
3、注意点:
A.子类重写的方法返回值类型,只能是返回值类型本身以及其子类,不能超出父类型的范围
代码错误示范:
class Animal06{
public String fun(){
return "你好";
}
}
class Cat06 extends Animal06{
@Override
public ~~Object~~ fun() {
return super.fun();
}
}
B.子类的访问修饰符不能严格于父类的访问修饰符
class Animal06{
protected String fun(){
return "你好";
}
}
class Cat06 extends Animal06{
@Override
~~private~~ String fun() {
return super.fun();
}
}
三、栈内存
package qf22020212;
public class Demo03 {
public static void main(String[] args) {
int m = add(20, 30);
System.out.println(m);
}
public static int add(int n, int b) {
return n + b;
}
}
四、数组
1、概念:为什么使用数组,需要容器来存储相同数据类型的数据,数组是将数据进行有规律的进行存储,所以很容易赋值取值。
2、动态初始化格式:数组数据类型 [] 名称(内存地址) = new 数组数据类型[长度(开辟的内存空间长度)];
3、赋值取值方式:名称(内存地址)[索引/下标];
4、代码实现:
package qf22020212;
public class Demo04 {
public static void main(String[] args) {
int[] arr = new int[3];
//数组的下标/索引是从零开始的
arr[0] = 1;//赋值
arr[1] = 2;
arr[2] = 3;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
5、数组的静态初始化:
A.格式1:int[] arr = new int[]{1,2,4,5};
B.格式2:int[] arr = {1,2,4,5};
静态初始化不能分开写如:
int[] arr;
arr = {1,2,4,5}(错误)
五、递归调用
1、含义:就是自己调用自己,设置某个结束条件
package qf22020212;
public class Demo01 {
public static void main(String[] args) {
System.out.println(new Demo01().add(100));
}
public int add(int n) {
//三目运算符结合递归调用,实现简化1加到100
return n == 1 ? 1 : n + add(n - 1);
}
}
六、数据类型初始化默认值
1、整数类型:byte、short、int、long 默认都为0
2、浮点类型:float、double 默认都为0.0
3、布尔类型:boolean 默认为false
4、字符类型:char 默认为 ’ ’ 为空格字符
5、引用类型默认为:null 如:String
七、jvm内存划分
1、内存:编写的java的源代码文件是存储硬盘中,运行java的程序是在内存中硬盘中的数据是永久保存,内存中的数据都是临时保存
2、jvm 将内存划分为五块
A.栈:所有局部变量都是存在栈内存中,所有的方法在执行的时候,都会进栈,在栈内开辟内存空间
B.堆:所有new的局部变量都会在堆内存中开辟空间 例如 new 对象、new数组
C.方法区:所有的字节码文件claass类加载信息,静态的资源都是存储方法区中的
D.本地方法区:调用本地方法,java使用native的带调用c与c++的方法
例子:public native int hashCode();
E.程序计算器:与cpu有关,控制的程序的执行,控制具体的代码执行
图: