- 步骤清晰简单,第一步做什么,第二步做什么
- 适合处理简单问题
- 分类。对这些类别分别思考
- 适合处理复杂的问题
- 本质:以类的方式组织代码,以对象的组织(封装)数据
- 抽象
- 三大特性
(1)封装
(2)继承
(3)多态 - 从认识论的角度,先有对象后又类
- 从代码运行角度考虑是先有类有对象
- 静态方法
- 非静态方法
假如我有两个类,一个是Student 类,另一个是Teacher 类,我在Student类中写了一个方法 public static void say() ,如果我想在Teacher 类中调用,直接Student.say(),即可,反之如果没有static,则需实例化这个类 对象类型 对象名 = 对象值(new Student().say())
Student student = new Student();
student.say();
//和类一起加载 public static void a(){ b(); //不可调用b(),会报错,如果两个都有static或者都没static,这样是不会报错的 } //类实例化后才存在 public void b(){ }类和对象的关系
创建和初始化对象一个类中有属性,有方法,抽象的模板
- 使用new关键字创建对象
Hy baiYueChu ; //变量baiYueChu 是引用Hy该类的一个实例 baiYueChu = new Hy(); //创建一个对象,并且将它的引用赋给变量baiYueChu Hy baiYueChu = new Hy(); //此一条语句结合上述功能
使用new关键字创建的时候,除了分配内存空间,还会给创建好的对象进行默认初始化
如上图,我们创建两个类,一个Hy(狐妖小红娘),另一个类是Character(人物),在Hy类中,我们在这个类中给所有的人物定义两个属性,name lover,我们开始不能设置name 是什么 lover是什么,毕竟狐妖里面有许多人,然后我们在Character 类中实例化,我们实例化了 baiYueChu wangQuanFuGui,这两个人物拥有两个属性 name lover ,我们可以设置他们这两个属性。(表述可能不太清楚)。所以 以类的方式组织代码,以对象的组织(封装)数据 ,有没有那么一点点理解了!!!
- 构造方法(特殊类型的方法) <-------调用它可以创建一个新对象
- 分类
(1) 无参构造方法
(2) 有参构造方法
类中的构造器也称构造方法,是在进行创建对象的时候必须要调用的,构造器特点
- 必须与类的名字相同
- 必须没有返回类型,也不能写void
一个类即使什么都不写也会存在一个构造方法(默认存在)
显示定义构造器
构造器核心作用
- 使用new关键字,本质是调用构造器
- 用来初始化值
//与类名相同,无参数 //实例化初始值 public Hy(){ } //有参构造器 :一旦定义了有参构造器,无参必须显式定义 public Hy(String name,String lover){ }创建对象内存分析
看这
Hy baiYueChu = new Hy();
Hy wangQuanFuGui = new Hy();
只是存放了该对象的引用,相当于指针一样,指向堆中对象的存储空间
访问对象的数据和方法用点操作符(.)
baiYueChu.name引用数据域
baiYueChu.print(); //调用print方法
Math.power(2,3) 可以这样调用power因为Math类中的方法都是用关键字static 定义的静态方法,而print是非静态的
引用数据域和null值如果一个引用类型的数据域,没用引用任何对象,如上程序中,我们在Hy中并没有引用任何对象,没有赋值,所以它有初始值那就是null(因为那是String类)反之,如果只是局部变量没有赋初值,其实系统不会给局部变量一个默认初始值
静态变量,常量,方法静态变量被类中的所有对象所共享,静态变量不能访问类中的实例成员(实例数据域和方法)
实例方法可以调用实例方法和静态方法,以及访问实例数据域或者静态数据域。静态方法可以调用静态方法以及访问静态数据域,然而静态方法不能调用实例方法或者访问实例数据域,因为静态方法和静态数据域不属于某个特定的对象
可见修饰符- 可以在类、方法和数据域前使用public (公共类) ,表明可以被任何其他的类访问(无限制)
- 如果一个类没有被定义为public ,那么它只能在同一个包中被访问
- private 修饰,表明只可以在它自己的类中被访问
修饰符private只能应用于类的成员上
大多数情况下,构造方法都应该是公共的,但是如果想防止用户创建类的实例,可以使用私有的构造方法.例如Math中的所有数据域和方法都是静态的,所以没必要创建Math的实例,为了防止用户创建`Math类的对象,构造方法定义如下
private Math(){ }数据域封装
将数据域设为私有有利于保护数据,并且使得类易于维护
- 通过设置方法赋初值
- 通过获取方法返回数据域中的值(alt+insert)
注意:从现在开始,除了特别的原因,所有数据域都应该声明为私有,并且所有的构造方法和方法应该被声明为公共
要注意方法中的形参是怎么定义的
public class Test { public static void main(String[] args){ Hy baiYueChu = new Hy(); baiYueChu.setName("白月初"); printCharacter(baiYueChu); } public static void printCharacter(Hy renWu){ //传递过去的相当于指向baiYueChu对象的指针 System.out.println(renWu.getName()+"说 万物有界,爱恨无由"); } }对象数组
- 声明创建
Hy[] renWu = new Hy[10] //声明创建了包含10个Hy对象的数组
- 初始化
public class Test { public static void main(String[] args) { Hy[] renWu = new Hy[10]; for(int i =0 ;i< renWu.length;i++){ renWu[i] = new Hy(); //Hy() 构造器,可以初始化 } renWu[0].setName("涂山红红"); renWu[1].setName("涂山雅雅"); renWu[2].setName("涂山容容"); renWu[3].setName("涂山苏苏"); renWu[4].setName("王权霸业"); renWu[5].setName("东方淮竹"); for(int i =0;i < 5;i++){ System.out.println(renWu[i].getName()); } } }变量的作用域
实例变量和静态变量的作用域是整个类,无论变量在哪里声明
如果一个局部变量和一个类变量具有相同的名字,那么局部变量优先,同名的类变量被隐藏
this 引用- 引用数据域
- 使用this调用构造方法
使用this可以调用同一个类的另一个构造方法