文本关键字:类、属性、行为、实例化、对象java
说到类和对象,这都是两个比较抽象的词,若是用在程序中,那就更不知道是什么意思了。其实你们能够先不联系程序,咱们在对一大堆东西分类的时候天然是有一个标准的,符合某些特征的分到一类,符合另一些特征的分到另一类。在每一个类别中,每同样东西都有相同的特征,可是又有所差异,每同样东西就比如一个一个的对象,是一个切切实实的东西,而分类的类别就好似是一个标准或者描述,会更抽象一些。编程
在编程中,咱们一般会借助程序去实现不少应用系统,来知足平常生活中的须要,如网络购物、人力资源管理等等。若是使用面向对象来开发,首先须要作的就是明确这个应用系统当中有哪些角色,这些角色都可以使用哪些功能,每种都有哪些本身的特征。
咱们以一个教学管理系统为例,主要的功能就是进行排课,记录学生和教师的基本信息,记录和统计学生的学习成绩等。那这其中主要就涉及学生、教师、管理员三种角色,当有一批学生入学时,咱们要将学生的信息录入系统,这就好像咱们一直在填的各类表格,每一个学生须要采集的信息都是固定的,不一样的是信息的内容。
这就比如咱们定义了一个学生类,咱们想要收集的学生信息就是对这个类别的描述,学生有学号、有院系、有其余的基本信息,这也是学生的固有特征,因而咱们能够用以下的代码描述:网络
// 用于描述学生的类 public class Student{ String sno;// 学号 String name;// 姓名 String college;// 学院 String major;// 专业 ... }
理解了程序中类的概念和表示方式后,对象就比较好理解了。简单来讲对象就是按照类的标准建立出来的一个具体能够操做的东西,也就是一个个具体的学生。每一个学生都具有相同的特征,可是能够有不一样的姓名、学院、专业等本身的信息。在程序运行时的体现就是内存中开辟了对应的空间,想要建立一个新的对象使用以下的代码:ide
public class Test{ public static void main(String[] args){ // 变量类型 变量名称 = new 类的构造器(); Student student = new Student(); // 大写的Student就是咱们要使用的学生类型,名称必须彻底一致 // 小写的student就是由学生类建立出来的对象的名称 // 也是咱们操做对象是直接使用的名称 // new是用来建立对象的关键字,须要调用相应的构造器 // 有关于构造器的用法会在后续文章详细说明,初学能够记忆为:类名(); } }
从上面的例子中咱们已经能够看到,类至关因而一个模板或是像工厂的图纸,对象则至关于按照这个标准和模具创造出来的个体,每个对象都具有相同的特征。
在程序中的体现就是,使用class关键字定义一个类结构,而后在这个结构中对整个类进行描述,都具有哪些属性,均可以产生行为,可是只有具体的对象能够具有具体的属性值和产生具体的行为(有关于静态的声明将在另外的文章中单独说明)。学习
咱们应该如何描述和定义一个类呢?咱们最开始写的HelloWorld不也是一个类嘛?为何没这么多乱七八糟的概念?下面咱们就来进一步解析。
从客观世界的角度出发,好比小明上了大学,这就是一个具体的学生,他有学号、姓名、对应的学院、专业等等,这都是他我的的基本信息,除此以外,他还能够进行多种活动,好比选课、考试、修改本身的部分信息等等。
那么咱们从程序的角度出发,应该如何定义一个类呢?这取决于咱们的须要,对于一个教学管理系统来讲,咱们关心的只是和学生学习相关的信息,学生可以选课、考试等等。对于一个后勤管理系统来讲,咱们关心的则是学生的饭卡消费状况,出入宿舍的时间,学生可以充值、消费、刷卡等等。因此如何定义和描述一个类,取决于咱们的应用系统须要,或者是题目的要求。测试
属性指的就是所描述的类当前的状态,也就是他本身的一些信息,直接在类下进行定义,和正常声明一个变量的格式相同,能够不指定初始值。code
行为指的就是当前这个类所建立出的对象都能进行什么样的行为,在程序上的表现就是方法,能够被具体的对象来进行调用,在方法体中用代码实现具体的功能。对象
// 用于描述学生的类 public class Student{ // 学生类的属性 String sno;// 学号 String name;// 姓名 String college;// 学院 String major;// 专业 ... // 学生类的行为 public void study(){ // 去学习 System.out.println("去上课"); } public void exam(){ // 去考试 System.out.println("去考试"); } }
在一般状况下,咱们定义的一个类由四大部分构成:属性、行为、构造器以及其余继承Object的方法。也就是说都不存在能够直接执行的main方法,而只是为了定义一个咱们想要使用的类,那么怎么样才能调用到,把咱们的类用起来呢?就是经过那些具有main方法的类,如最初咱们使用的HelloWorld,这就是一个最简形式的可执行类。blog
public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } }
固然,咱们也能够直接在类中添加main方法来测试运行,可是通常不会这样作,由于会有一些权限的问题不可以测试完整,一般的办法是新建一个单独的测试类,来进行调用测试。继承
// 调用时须要将两个类放在同一目录下(同一包中) public class Test{ public static void main(String[] args){ // 建立一个学生对象 Student student = new Student(); // 为对象的属性赋值 student.sno = "1130050152"; student.name = "小明"; student.college = "数学科学学院"; student.major = "信息与计算科学"; // 显示对象的属性值 System.out.println("该学生的名字是:" + student.name); // 经过对象调用方法,发生行为 student.study(); student.exam(); } }
经过上面咱们已经知道对象的概念,以及如何使用建立和使用一个对象。接下来咱们再来明确一下类和对象,对象和对象之间的关系。
建立对象的过程也能够被称之为实例化,对象也能够被叫作类的实例。这个概念也很好理解,在类中只是定义了一系列的描述信息,真正去执行须要靠具体的对象,以一个类为基准,能够建立出不少对象。
对象与对象之间存在共同点,除了使用静态声明的属性外,是不会互相影响的,这是一个很重要的特色。当咱们使用不一样的对象去调用方法和输出属性信息时,虽然类当中的结构彻底一致,可是因为对象所处的状态(属性值)可能不一样,那么方法执行的结果也会不一样。
// 用于描述学生的类 public class Student{ // 学生类的属性 String sno;// 学号 String name;// 姓名 double balance;// 余额 ... // 学生类的行为 public void recharge(double money){ // 对学生卡充值 balance += money; System.out.println("当前余额为" + balance); } public void getBalance(){ // 显示卡内余额 System.out.println("当前余额为" + balance); } }
// 测试类:将两个类放在同一目录下(同一包中) public class Test{ public static void main(String[] args){ // 建立第一个学生对象 Student student1 = new Student(); // 为对象的属性赋值 student1.balance = 23.70; // 调用方法 student1.getBalance(); student1.recharge(100.0); // 建立第二个学生对象 Student student2 = new Student(); // 为对象的属性赋值 student2.balance = 15.60; // 调用方法 student2.getBalance(); student2.recharge(50.0); } }
程序执行完毕后能够再次输出查看两个对象的属性值,不会互相影响。