▷ 面向对象
-
对象:
是一种特殊的数据结构 -
对象:
使用类 new 出来的,有了类就可以创建对象,例Random r = new Random()
,其中r
就是一个对象 -
格式:
public class 类名 { 变量和一些类方法 }
- 面向对象编程,更加符合人类的思维习惯,编程也会更直观
- 其实万物皆对象,如果想操作学生数据,就去找学生对象;如果想操作随机数,就去找随机数对象,例
r.nextInt()
- 每种对象可以实现不同功能,这样就显得代码会更加的清晰和直观
- 比如在游戏中,生成
npc
需要用npc
对象去处理;生成武器,就去用武器的对象去处理
// 新建类,Npc.java
package tiny.geeker;
public class Npc {
String name; // 生成npc的名字
double blood; // 给npc加血量
public void printName() {
System.out.println("创建的NPC是:" + name);
}
public void printBlood() {
System.out.println("创建的NPC是:" + name + ",它的血量为:" + blood);
}
}
// 调用类
package tiny.geeker;
public class Test {
public static void main(String[] args) {
Npc npc = new Npc();
npc.name = "德玛西亚";
npc.blood = 999999;
npc.printName();
npc.printBlood();
}
}
▷ 注意事项
-
第一:
类名建议使用英文且首字母大写,满足驼峰模式且要有意义,这样别人一眼就知道这个类大概的作用是什么,比如上面的Npc
-
第二:
类中定义的变量称为成员变量或者叫对象的属性,比如上面的name
和blood
;类中定义的方法称为成员方法也叫对象的行为,比如上面的printName
和printBlood
-
第三:
一个类文件中,可以写多个class类,但是只能用一个public
修饰 -
第四:
类成员变量本身存在默认值,一般不需要赋初始值 -
第五:
对象和对象之间的数据不会影响,但是多个变量指向同一个对象时就会相会影响 -
第六:
如果某个对象没有一个变量引用它,那么该对象就会成为垃圾对象
package tiny.geeker;
public class Test {
public static void main(String[] args) {
Npc npc = new Npc();
// 类成员变量本身存在默认值,一般不需要赋初始值
System.out.println(npc.name);
System.out.println(npc.blood);
// 对象和对象之间的数据不会影响
Npc npc1 = new Npc();
npc1.name = "德玛西亚";
npc1.printName();
Npc npc2 = new Npc();
npc2.name = "飞兔小哥";
npc2.printName();
// 多个变量指向同一个对象时就会相会影响
Npc npc3 = new Npc();
Npc npc4 = npc3;
npc3.name = "德玛西亚";
npc3.printName();
npc4.name = "飞兔小哥";
npc3.printName();
// 如果某个对象没有一个变量引用它,那么该对象就会成为垃圾对象
Npc npc5 = new Npc();
npc5 = null;
npc5.printBlood();
}
}
▷ this关键字
-
this:
其实是一个变量,在方法中指向当前的对象 - 可以看到在类中打印的
this
和在调用时打印的类名,都指向了同一个地址,所以可以知道this
就是指向了类的本身 - 因此在类中,可以通过
this
给类中的变量赋值以及调用类本身中的方法
▷ 构造器
-
构造器:
当使用new
实例化一个类时,构造器就会被调用,经常可以给类做一些初始化的操作 -
构造器:
分为无参构造器
和有参构造器
-
格式:
public class Npc { public Npc() { ... } }
构造方法其实是一个跟类同名的方法,且没有返回值类型
package tiny.geeker;
public class Npc {
public Npc() {
System.out.println("我是构造方法");
}
}
▷ 重载构造方法
- 在前面方法的重载中,知道当方法名字一样,参数不一样的时候就叫方法的重载,那么构造器的重载也是同样的,但是也叫
有参构造器
▷ 实体类
- 这是一个特殊的类,仅仅知识用来保存数据,可以用它来创建对象,保存某个事物的数据
- 成员的变量必须
私有
,使用private
,不对外暴露变量,而是通过get
、set
方法去操作变量,并且必须有无参数构造器
- 实体类主要是为了让数据和数据的业务处理相互分离
package tiny.geeker;
public class Npc {
private String name;
private double blood;
public Npc() {
}
public Npc(String name, double blood) {
this.name = name;
this.blood = blood;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getBlood() {
return blood;
}
public void setBlood(double blood) {
this.blood = blood;
}
}
文章来源:https://www.toymoban.com/news/detail-755776.html
▷ 案例:英雄搜索
- 现在我们创建
Hero
类,并且设置多个英雄,并且可以通过英雄的id进行检索 - 需要定义创建英雄的 Hero 类和操作 Hero 的类,创建类负责保存英雄的数据,操作类负责进行英雄检索
package tiny.geeker;
public class HeroAction {
private Hero[] heros;
public HeroAction(Hero[] heros) {
this.heros = heros;
}
public void printAllHeros() {
System.out.println("-----所有的英雄信息如下-----");
for (int i = 0; i < this.heros.length; i++) {
Hero h = heros[i];
System.out.println("id:" + h.getId() + " 名称:" + h.getName() + " 血量:" + h.getBlood());
}
}
public void getHeroById(int id) {
System.out.println("-----检索的英雄信息如下-----");
for (int i = 0; i < this.heros.length; i++) {
Hero h = heros[i];
if(h.getId() == id) {
System.out.println("id:" + h.getId() + " 名称:" + h.getName() + " 血量:" + h.getBlood());
return;
}
}
System.out.println("没有该英雄信息");
}
}
文章来源地址https://www.toymoban.com/news/detail-755776.html
到了这里,关于〔005〕Java 基础之面向对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!