(以下内容全部来自上述课程)
1.static–静态–共享
static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量。
1.静态变量
被static修饰的成员变量,叫做静态变量。
特点:
- 被该类所有对象共享
- 不属于对象,属于类
- 随着类的加载而加载,优先于对象存在
调用方式:
- 类名调用(推荐)
- 对象名调用
2.静态方法
被static修饰的成员方法,叫做静态方法。
特点:
- 多用在测试类和工具类中
- javabean类中很少会用
调用方法:
- 类名调用(推荐)
- 对象名调用
3.static内存图
静态变量是随着类的加载而加载的,优先于对象出现的。
4.工具类
JavaBean类:用来描述一类事物的类。
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。
1.规则:
- 类名见名知意
- 私有化构造方法
- 方法定义为静态
2.练习:
需求:在实际开发中,经常会遇到一些数组使用的工具类。
请按照如下要求编写一个数组的工具类:ArrayUtil
-
提供一个工具类方法printArr,用于返回整数数组的内容。
返回的字符串格式如:[10,20,50,34,100](只考虑整数数组,且只考虑一维数组) -
提供这样一个工具方法getAerage,用于返回平均分。(只考虑浮点型数组,且只考虑一维数组)
-
定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果。
工具类:
package a02staticdemo2;public class ArrayUtil {//私有构造方法//目的:是不让其他类创建本类对象private ArrayUtil(){}//需要定义为静态的,方便调用public static String printArr(int[] arr){StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if(i == arr.length - 1){sb.append(arr[i]);}else{sb.append(arr[i]).append(", ");}}sb.append("]");String s = sb.toString();return s;}//返回平均值public static double getAvg(int[] arr){int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}int avg = sum / arr.length;return avg;}
}
测试类:
package a02staticdemo2;public class TestDemo {public static void main(String[] args) {//测试工具类中的两个方法是否正确int[]arr = {1,2,3,4,5};double avg = ArrayUtil.getAvg(arr);System.out.println(avg);String s = ArrayUtil.printArr(arr);System.out.println(s);}
}
5.注意事项
- 静态(公有)方法中,只能访问静态。
- 非静态(私有)方法可以访问所有。
- 静态方法中没有this关键字。(非静态中存在隐藏this,在形参之前,由虚拟机赋值)
2.继承
面向对象的三大特征:封装、继承、多态。
封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
1.定义
- java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。
public class Student extends Person{}
- Student称为子类(派生类),Person称为父类(基类或者超类)。
2.好处
- 可以把多个子类中重复的代码抽取到父类中,提高了代码的复用性。
- 子类可以在父类的基础上,增加其他的功能,使子类更强大。
3.什么时候用继承
当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码。
4.继承的特点
java只支持单继承(一个爹),不支持多继承(好几个爹),但支持多层继承(子孙三代)。
每一个类都直接或者间接的继承于Object(爷爷)。
5.例子
1.Animal
package a01loopextendsdemo1;public class Animal {public void eat(){System.out.println("动物吃东西");}public void drink(){System.out.println("动物喝水");}
}
2.Cat
package a01loopextendsdemo1;public class Cat extends Animal{public void catchMouse(){System.out.println("猫抓老鼠");}
}
3.Dog
package a01loopextendsdemo1;public class Dog extends Animal{public void lookHome(){System.out.println("狗看家");}
}
4.布偶猫
package a01loopextendsdemo1;public class Ragdoll extends Cat{}
5.狸花猫
package a01loopextendsdemo1;public class LIHua extends Cat{
}
6.哈士奇
package a01loopextendsdemo1;public class Husky extends Dog{public void breakHoom(){System.out.println("哈士奇拆家");}
}
7.泰迪
package a01loopextendsdemo1;public class Teddy extends Dog{public void touch(){System.out.println("泰迪狗蹭来蹭去");}
}
8.测试类
package a01loopextendsdemo1;public class Test {public static void main(String[] args) {//创建对象并调用方法//1.创建布偶猫的对象Ragdoll ragdoll = new Ragdoll();ragdoll.eat();ragdoll.drink();//2.创建狸花猫的对象LIHua liHua = new LIHua();liHua.eat();//3.创建哈士奇的对象Husky husky = new Husky();husky.eat();husky.drink();}
}