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 面向对象的优点

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


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

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

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

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

目录
相关文章
|
3天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
14 3
|
3天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
14 3
|
1天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
21 3
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
2天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
3天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
3天前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
12 3
|
3天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
9 0
|
3天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
13 0
|
3天前
|
Java API 调度
【Java多线程】Thread类的基本用法
【Java多线程】Thread类的基本用法
6 0