面向对象
代码块的概述与分类
在java中,使用 { } 括起来的被称为代码块
代码块分类:
根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)
常见代码块的应用:
局部代码块:
在方法内出现,限定变量的生命周期,及早释放,提高内存利用率
构造代码块(初始化块):
在类中方法外出现;多个构造方法中相同的代码存放在一起,
每次跳用构造都执行,并且在构造方法前执行
静态代码块:
1,在类中方法外出现,加了static修饰
2,在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候执行,并且只执行一次
3,一般用于加载驱动
比方法便优先执行,
1 classDemo1_Code {2 public static voidmain(String[] args) {3 {4 int x = 10; //限定变量的声明周期
5 System.out.println(x);6 }7
8 Student s1 = newStudent();9 System.out.println("---------------");10 Student s2 = new Student("张三",23);11
12 }13
14 static{15 System.out.println("我是在主方法类中的静态代码块");16 }17 }18
19 classStudent {20 privateString name;21 private intage;22
23 publicStudent(){24 //study();
25 System.out.println("空参构造");26 } //空参构造
27
28 public Student(String name,int age) {//有参构造29 //study();
30 this.name =name;31 this.age =age;32 System.out.println("有参构造");33 }34
35 public voidsetName(String name) {36 this.name =name;37 }38
39 publicString getName() {40 returnname;41 }42
43 public void setAge(intage) {44 this.age =age;45 }46
47 public intgetAge() {48 returnage;49 }50
51 { //构造代码块:每创建一次对象就会执行一次,优先于构造函数执行52 //System.out.println("构造代码块");
53 study();54 }55
56 public voidstudy() {57 System.out.println("学生学习");58 }59
60 static{61 System.out.println("我是静态代码块");62 //随着类加载而加载,且只执行一次63 //作用:用来给类进行初始化,一般用来加载驱动64 //静态代码块是优先于主方法执行
65 }66 }
例子
1 classStudent {2 static{3 System.out.println("Student 静态代码块");4 }5
6 {7 System.out.println("Student 构造代码块");8 }9
10 publicStudent() {11 System.out.println("Student 构造方法");12 }13 }14
15 classDemo2_Student {16 static{17 System.out.println("Demo2_Student静态代码块");18 }19
20 public static voidmain(String[] args) {21 System.out.println("我是main方法");22
23 Student s1 = newStudent();24 Student s2 = newStudent();25 }26 }
例子2
extends(继承)
让类与类之间产生关系,父子类的关系
1 classDemo_Animal{2 public static voidmain(String[] args ) {3 cat c = newCat();4 c.name = "汽水"
5 c.color = "桔色"
6 c.eat();7 c.sleep();8 c.play();9 System.out.println("名字:" +c.name );10 System.out.println("颜色:" +c.color );11 System.out.println("在干嘛:" +c.play );12 }13 }14 classAnimal {15 String name;16 String color;17 public voideat() {18 System.out.println("吃饭");19 }20 public voidsleep() {21 System.out.println("睡觉");22 }23 public voidplay() {24 System.out.println("打豆豆");25 }26 }27 class Cat extendsAnimal{ }28 class Dog extendsAnimal{ }29 /*
30 extends是继承的意思31 Animal是父类32 Cat和Dog都是子类33 */
例子
继承的好处与弊端
好处:
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
弊端:
类的耦合性增强了
开发的原则:高内聚,低耦合
耦合:类与类的关系
内聚:就是自己的完成某件事情的能力
java中类的继承特点
1,Java只支持单继承,不支持多继承。
2,有些语言是支持多继承,格式:extends 类1,类2,...
Java支持多层继承(继承体系):子类 ==> 父类 ==> 爷
注:
1,如果想用这个体系的所有功能用最底层的类创建对象
2,如果想看这个体系的共性功能,看最顶层的类
1 classDemo2_Extends {2 public static voidmain(String[] args) {3 DemoC d = newDemoC();4 d.show();5 }6 }7 classDemoA {8 public voidshow() {9 System.out.println("DemoA");10 }11 }12
13 class DemoB extendsDemoA {14 public voidmethod() {15 System.out.println("DemoB");16 }17 }18
19 class DemoC extendsDemoB {20 public voidprint() {21 System.out.println("DemoC");22 }23 }
例子
继承的注意事项
1,子类只能继承父类所有非私有的成员(成员方法和成员变量)
2,子类不能继承父类的构造方法,但是可以通过super关键字去访父类构造方法
3,不要为了部分功能二区继承
继承其实体现的是一中关系:“is a”
假设:如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。