java 类与对象 2

简介: java 类与对象

3.3 如何创建和使用对象

定义好了 School类,下面就可以根据定义的模板创建对象了。类的作用就是创建对象。由类生成对象,称为类的实例化过程。一个实例也就是一个对象,一个类可以生成多个对象。创建对象的语法如下。


语法


类名 对象名 = new 类名() ;


在创建类的对象时,需要使用Java的new关键字。例如,创建School类的一个对象。


School center = new School()


center对象的类型就是School类型。使用new创建对象时,我们并没有给它的数据成员赋一个特定的值。考虑到每个对象的属性值可能是不一样的,所以在创建对象后再给它的数据成员赋值。


在Java中,要引用对象的属性和方法,需要使用操作符。其中,对象名在圆点的左边,属性或方法的名称在圆点的右边。


语法


对象名.属性       //引用对象的属性


对象名.方法名()   //引用对象的方法


例如,创建School类的对象center后,就可以给对象的属性赋值或调用方法,代码如下。


center .name  ="北京中心”;  //给 name 属性赋值


center. showCenter () ;  //调用  showCenter () 方法


掌握了如何创建类的对象,下面就来解决11.3.2节中的问题。


示例3


public class InitialSchool {

  public static void main(String[] args) {

     School center = new School();

     System.out.println("***初始化成员变量前***");

     center.showCenter();

     center.schoolName = "北京中心";       //给schoolName属性赋值

     center.classNumber = 10;         //给classNumber属性赋值

     center.labNumber = 10;          //给labNumber属性赋值

     System.out.println("\n***初始化成员变量后***");

     center.showCenter();

  }

}


程序运行结果如图11.7所示。

61de7cb2668f46df942e1c16eaf7703d.png


下面分析示例3的代码。这里新创建了 Initialschool类,用它来测试School类。大家知道,执行程序需要一个入口。因此,像以前编写过的程序一样,在main()方法中编写代码来使用School类。


图11.7示例3的运行结果


说明:main()方法是程序的入口,可以出现在任何一个类中,但要保证一个Java类中只有一个main()方法。因此,我们可以将main()方法写在School类中。但这里,我们将main()方法放在了 Initialschool类中,目的是使不同的类实现不同的功能。


在示例3的main()中,有以下三点需要大家注意。


使用关键字new创建类的对象 "center"。

School center = new School();


使用操作符访问类的属性。

center.schoolName = "北京中心";    //给schoolName属性赋值

center.classNumber = 10;           //给classNumber属性赋值

center.labNumber = 10;             //给labNumber属性赋值


使用操作符访问类的方法。

center.showCenter();


下面分析运行结果。showCenter()方法返回一个字符串,由图11.7可知,在没有初始化成员变量时,String类型的schoolName变量的值为null (空),而两个整型变量classNumber和labNumber的值是0。为什么呢?这是因为在定义类时,如果没有给属性赋初始值,Java会给它一个默认值,如表11一2所示。


0b2d61a44ef74d29a4589ae3fb96f759.png



提示:

db0d197306eb4b339ff6642adddd6cd3.png


在Idea中使用操作符引用类的属性和方法时,发现Idea会弹出一个下拉菜单,如图11.8所示,其中列出了所有的属性和方法。用户只需要选择想要引用的选项就可以了,这是Idea给用户提供的便捷。


图11.8自动提示


3.4 综合示例

前面定义了 School类,下面学习如何定义学员类和教员类。


问题:


编写学员类,输出学员相关信息,如图11.9所示。

编写教员类,输出教员相关信息,如图11.10所示。

4017155f832041298a8f6ff7f2afd4b2.png

782eecefdc6c4dbb9d799b3b6c7ca899.png

图11.9输出学员信息                     图11.10输出教员信息


分析:


由图11.9可知,学员类包含的属性有姓名、年龄、班级、爱好;包含的方法为显示个人信息,如示例4所示。

由图11.10可知,教员类包含的属性有姓名、专业方向、教授课程、教龄;包含的方法为显示个人信息,如示例5所示。

示例4


学员类:


public class Student {

   String name;   //姓名

   int age;      //年龄

   String classNo;    //班级

   String hobby;  //爱好


   public void show(){

       System.out.println(name + "\n年龄:" + age + "\n就读于:" +

               classNo + "\n爱好:" + hobby);

   }

}


输出学员信息:


public class InitialStudent {

   public static void main(String args[]){

       Student student = new Student();   //创建对象

       student.name = "张浩";            //给各个属性赋值

       student.age = 10;

       student.classNo = "S1班";

       student.hobby = "篮球";

       student.show();                   //调用方法

   }

}


示例5


教员类:


public class Teacher {

   String name;   //姓名

   String major;  //专业方向

   String courses;    //教授课程

   int schoolAge; //教龄


   //输出信息方法

   public void show(){

       System.out.println(name + "\n专业方向:" + major +

               "\n教授课程:" + courses + "\n教龄:" + schoolAge);

   }

}


输出教员信息:


public class InitialTeacher {

   public static void main(String[] args) {

       Teacher teacher = new Teacher();   //创建对象

       teacher.name = "王老师";           //给各个属性赋值

       teacher.major = "计算机";

       teacher.courses = "使用Java语言理解程序逻辑";

       teacher.schoolAge = 5;

       teacher.show();                   //调用方法

   }

}


下面通过另外一个例子,巩固类的使用。


问题:一个景区根据游人的年龄收取不同价格的门票,其中大于60岁或小于18岁的免费,18〜60岁的20元。请编写游人(Visitor)类,根据年龄段决定能够购买的门票价格并输出。用户输入n则退出程序。


分析:首先要找出与要解决问题有关的对象并抽象出类。很明显,根据要解决的问题,可以得到游人类,该类可以有姓名和年龄两个属性。让用户输入年龄,利用选择结构解决,如示例6所示。


示例6


游人类:


package cn.jbit.dlc1;

import java.util.Scanner;

public class Visitor {

   String name;   //姓名

   int age;      //年龄

   public void show(){

       Scanner input = new Scanner(System.in);

       while(!"n".equals(name)){

           if(age>=18 && age<=60){       //判断年龄

               System.out.println(name + "的年龄为:" + age +

                       ",门票价格为:20元\n" );

           }else{

               System.out.println(name + "的年龄为:" + age + ",门票免费\n");

           }

           System.out.print("请输入姓名:");

           name = input.next();         //给name属性赋值

           if(!"n".equals(name)){

               System.out.print("请输入年龄:");

               age = input.nextInt();       //给age属性赋值

           }

       }

       System.out.print("退出程序");

   }

}


输出门票信息:


package cn.jbit.dlc1;

import java.util.Scanner;

public class InitialVistor {

   public static void main(String[] args) {

       Scanner input = new Scanner(System.in);

       Visitor v = new Visitor();    //创建对象

       System.out.print("请输入姓名:");

       v.name = input.next();       //给name属性赋值

       System.out.print("请输入年龄:");

       v.age = input.nextInt();      //给age属性赋值

       v.show();                       //调用显示信息方法

   }

}


示例6的运行结果如图11.11所示。


7af3839be19244d19b25d1d36393ec6f.png

为了程序演示的方便,示例6中的代码使用了循环,当ffl户输入n时退出程序。这里主要注意代码中使用new关键字创建对象及给属性赋值两个部分。


图11.11示例6的运行结果

3.5 面向对象的优点

了解了类和对象,也学习了如何定义类、创建对象和使用对象,下面总结面向对象的优点,具体如下。


与人类的思维习惯一致:面向对象的思维方式从人类考虑问题的角度出发,把人类解决问题的思维过程转变为程序能够理解的过程。面向对象程序设计能够让我们使用"类"来模拟现实世界中的抽象概念,用"对象"来模拟现实世界中的实体,从而用计算机解决现实问题。

信息隐藏,提高了程序的可维护性和安全性:封装实现了模块化和信息隐藏,即将类的属性和行为封装在类中,这保证了对它们的修改不会影响到其他对象,有利于维护。同时,封装使得在对象外部不能随意访问对象的属性和方法,避免了外部错误对它的影响,提高了安全性。

提高了程序的可重用性:一个类可以创建多个对象实例,增加了重用性。

面向对象程序设计还有其他优点,在以后的学习中会慢慢介绍。相信通过不断实践,学员的理解会不断加深。

目录
相关文章
|
15天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
33 6
|
6天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
3天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
28 17
|
9天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
34 17
|
4天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
8天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
8天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
9天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
8天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
17 3
|
10天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
18 5