面向对象
人为抽象的一种编程模型,在理解面向对象的代码时要按照抽象的模型来理解,不能只从代码字面来理解复杂的问题,学会拆分成一个一个独立的小问题,通过解决每一个小问题,最后解决一个大问题
类
类是事物,算法,逻辑,概念等的抽象,用来封装这类型相关的数据和方法代码,封装成独立组件,可以把类理解成模板,或者图纸.在创建类对象时就相当于按着这个模板来创建
对象
从类创建来的具体实例,每个实例占用独立的内存空间,保存各自的属性数据,实例可以单独控制,让实例去执行指定方法中的代码.
引用
保存一个实例对象的内存地址用引用变量,将地址值赋值给变量,用变量去调用一个实例,可以理解成遥控,只需要用引用去操作就行了.
这里以一个例子来了解:
项目:day0101_士兵
类:day0101.Test1类和Solder类
Solder类代码:
1 package day0101; 2 3 4 5 import java.util.Random; 6 7 8 9 /* 10 11 * 封装 12 13 * 相关数据,逻辑运算方法, 14 15 * 封装成一个"类"组件 16 17 */ 18 19 public class Solder { 20 21 //成员变量 22 23 int id; //默认值0 24 25 int blood = 100; 26 27 28 //成员方法 29 30 public void go() { 31 32 System.out.println(this.id+"号士兵前进"); 33 34 } 35 36 public void attack() { 37 38 if (blood == 0) { 39 40 System.out.println( 41 42 "这是"+id+"号士兵的尸体"); 43 44 return;//方法到此结束 45 46 } 47 48 System.out.println(id+"号士兵进攻"); 49 50 //模拟受到伤害,血量减少 51 52 //产生一个随机减血量 53 54 int d = new Random().nextInt(10); 55 56 blood -= d;//血量减少 57 58 if (blood < 0) {//如果血量变成负数,重置成0 59 60 blood = 0; 61 62 } 63 64 System.out.println("血量: "+blood); 65 66 if (blood == 0) { 67 68 System.out.println(id+"号士兵阵亡"); 69 70 } 71 72 } 73 74 }
Test1类代码:
package day0101; public class Test1 { public static void main(String[] args) { //新建 Soldier 实例 //再把它的内存地址值,保存到 s1 变量 /* s1 = { * id: 0, * blood: 100 * } */ Solder s1 = new Solder(); /* s2 = { * id: 0, * blood: 100 * } */ Solder s2 = new Solder(); //用s1变量找到士兵的内存空间,访问它的id变量 s1.id = 9527; s2.id = 9528; //用s1变量找到士兵的内存空间,让它去执行go()方法代码 s1.go(); s2.go(); s2.attack(); s1.attack(); } }
构造方法
新建实例时,执行的一种特殊方法 new Solder()
Java的类中必须有构造方法,如果自己不定义构造方法,编译器会添加默认的空构造方法
class Solder{ public Solder(){ } }
上面的代码是自己添加的一个空构造方法,当你不添加是,编译器也是自动生成空构造方法,什么也不做
构造方法的作用
创建一个实例之后,立即执行的一个特殊方法,构造方法中的代码可以任意编写,完成任意功能或执行任意运算,构造方法一般的作用是给成员变量赋值.成员变量是定义在类中的变量.
this用法
this.id
id是成员变量,当用构造函数给成员变量赋值时:
public class A{ int id; public A(int id){ this.id=id; } }
this.id表示的是成员变量id.
this(a,b)
a,b是括号中的参数,this(a,b)表示调用参数为两个构造方法
public class A{ int id; int a; public A(int id){ this(id,5) } public A(int id,int a){ this.id=id; this.a=a ; } }
this()要在代码的首行.