类和对象需要慢慢的逐步的才能理解,是一个很抽象的概念
【本节目标】
掌握类的定义方式以及对象的实例化
掌握类中的成员变量和成员方法的使用
掌握对象的整个初始化过程
掌握封装特性
掌握代码块
掌握内部类
在Java当中一切皆对象。
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面
向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人
们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。
例子一
传统的方式:注重的是洗衣服的过程,少了一个环节可能都不行。
而且不同衣服洗的方式,时间长度,拧干方式都不同,处理起来就比较麻烦。如果将来要洗鞋子,那就是另一种方式。
按照该种方式来写代码,将来扩展或者维护起来会比较麻烦。
以面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关
心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。
注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。
例子二
面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。
上图左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知),但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言。
在我们之前说过,类可以理解为结构体(甚至我自己认为是高级版本的结构体。在C语言当中,结构体是数据变量的集合,那么我现在认为类是变量+方法的集合)
像洗衣机,秘书,手机这些都是一个对象,而对象是一个复杂的集合体。
在java中定义类时需要用到class关键字,具体语法如下
// 创建类
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
class为定义类的关键字,ClassName
为类的名字,类名以大驼峰形式命名,{}中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。
定义一个人的对象
class Person {
public String name;
public int age;
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
定义一个洗衣机
class WashMachine {
public String brand; // 品牌
public String type; // 型号
public double weight;// 重量
public double length; // 长
public double width; // 宽
public double height; // 高
public String color; // 颜色
public void washClothes(){ // 洗衣服
System.out.println("洗衣功能");
}
public void dryClothes(){ // 脱水
System.out.println("脱水功能");
}
public void setTime(){ // 定时
System.out.println("定时功能");
}
}
采用Java语言类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM的基础上计算机就可以识别了。
注意事项
在项目工程中,一个Java文件当中,只写一个类
定义一个狗类
class PetDog {
public String name;//名字
public String color;//颜色
// 狗的属性
public void barks() {
System.out.println(name + ": 旺旺旺~~~");
}
// 狗的行为
public void wag() {
System.out.println(name + ": 摇尾巴~~~");
}
}
注意事项:
一般一个文件当中只定义一个类
main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
public修饰的类必须要和文件名相同
不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改
当一个文件中只有一个类的时候,会自动修改类命,但是类太多就要自己把类名修改成重命名后的文件名。
拿到一个对象,必须先进行类定义,定义完类以后,由类转换为对象的过程称为类的实例化。
类是一个用户自定义的类型。
定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog类和Student类。它们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
实例化方式
//通过关键字new,实例化一个Person对象
Person per = new Person();
public static void main(String[] args) {
//实例化一个Person对象
Person person = new Person();
person.name = "lisi";
person.age = 40;
System.out.println(person.name +" "+person.age);
}
//-------------
//编译器运行结果为
//lisi 40
public class Main{
public static void main(String[] args) {
PetDog dogh = new PetDog(); //通过new实例化对象
dogh.name = "阿黄";
dogh.color = "黑黄";
dogh.barks();
dogh.wag();
PetDog dogs = new PetDog();
dogs.name = "阿黄";
dogs.color = "黑黄";
dogs.barks();
dogs.wag();
}
}
//---------------
//运行结果为
//旺旺旺~~~
//摇尾巴~~~
//旺旺旺~~~
//摇尾巴~~~
注意事项
类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
类是一种自定义的类型,可以用来定义变量和方法.
一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
类只是一个设计,不占用物理空间,实例化出的对象才能实际存储数据,占用物理空间
类实例化的内存占用:
Person per = new Person();
首先per是引用类变量,存储的是地址,存储在栈上。
类当中包含成员变量和成员方法,成员变量存储在堆区,成员方法在内存的另一块区域(方法区),但是只有方法在调用的时候才会占用内存
补充
如果没定义name之前就调用sleep函数的话,那么打印出来的是null睡觉。
今天我们先讲类的定义和对象的实例化,因为类和对象很多,所以我们分三次讲解内容。