当前位置: 代码迷 >> 综合 >> 《Java 2 实用教程》课程学习(4)——第4章 类与对象
  详细解决方案

《Java 2 实用教程》课程学习(4)——第4章 类与对象

热度:102   发布时间:2023-10-01 10:58:08.0

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

本章着重介绍Java编程中类和对象等非常重要的概念。    

Java程序是由类组成的,编写Java程序的过程就是从现实世界中抽象出Java可实现的类并用合适的语句定义它们的过程,这个定义过程包括对类内各种属性和方法的定义,创建类的对象,也包括类间的各种关系和接口的定义。

4.1 类及方法

《Java 2 实用教程》课程学习(4)——第4章 类与对象

二、类的声明

《Java 2 实用教程》课程学习(4)——第4章 类与对象

2.类头

class关键字表明一个类的开始,在它的后面,应跟随新数据类型的名称。(注意不要把class写成Class)。  

类名最好采用见名知意的原则,如果类名是一个单词,首字母最好用大写字母,若由几个单词复合而成,每个单词的首字母最好都用大写字母。如:BeiJingTime, HelloChina等。  

父类名跟在extends 关键字后面,用来说明当前类是哪个已经存在类的子类,存在继承关系。继承是类与类之间的一种非常重要的关系。

例1

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

abstract class A
{  abstract void callMe();void callMeToo(){ System.out.println("this is a concrete methods.");}  
}class B extends A
{ void callMe(){ System.out.println("B's implementation of callme.");}
}class AbstractDemo
{ public static void main(String args[]){ B b;b=new B();b.callMe();b.callMeToo();}
}

《Java 2 实用教程》课程学习(4)——第4章 类与对象

三、类体

《Java 2 实用教程》课程学习(4)——第4章 类与对象

2.方法

《Java 2 实用教程》课程学习(4)——第4章 类与对象

用来描述类的功能,类中定义的方法(又称成员函数)通常起到两种作用:  

  • 一是围绕着类的属性进行各种操作;  
  • 二是与其他的类或对象进行数据交流、消息传递等操作。

方法头一般由方法名、参数列表、返回类型、方法修饰符方法抛出的例外五部分组成。

  • (1)方法名可以是任何有效的标识符,命名规则与标识符命名规则相同。 方法名由一个单词组成时,首字母用小写。  方法名由多个单词组成时,从第2个单词开始其它单词的首写字母用大写。
  • (2)类型说明符用来指定方法返回值的类型,方法最多只能返回一个值。
  • (3)参数列表是方法的输入接口,它列出了一系列形式参数的类型和名称,形参类型说明必须在参数表中给出,方法参数表的右括号后加一个分号是语法错误。
  • (4)参数表以逗号为分隔符,其中包含了方法被调用时传递给方法的参数说明。对于方法定义中的每一个参数,方法调用时必须有一个参量与之对应,而且该参量的类型必须与对应参数类型相一致。

3.方法的调用

《Java 2 实用教程》课程学习(4)——第4章 类与对象

4.构造方法

构造方法是一种特殊的方法,其特殊性主要体现在以下几个方面:

  • (1)构造方法的方法名与其所在类的类名相同。
  • (2)构造方法的主要作用是完成对类对象的初始化工作。
  • (3)构造方法不能由编程人员显式地直接调用。
  • (4)构造方法总是和new运算符一起使用。
  • (5)在创建一个类的新对象的同时,系统会自动调用该类的构造方法为新对象初始化。
  • (6)如果定义类时没有显示的定义构造方法,则系统提供不带参数的默认构造方法,默认构造方法将成员变量初始化为默认值。
  • (7)构造方法可以带有参数,但没有返回类型。
  • (8)一个类可以有多个构造方法。

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

class People
{ int change;float height,weight;boolean bigear;String head;void speak(String s){ System.out.println(s);}} 
class A
{ public static void main(String args[]){ }} 

4.2 对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

class People
{ int change;float height,weight;boolean bigear;String head;void speak(String s){ System.out.println(s);}} 
class A
{ public static void main(String args[]){ }} 

2. 为对象分配内存

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

class People
{ int change;float height,weight;boolean bigear;String head;void speak(String s){ System.out.println(s);}} 
class A
{ public static void main(String args[]){ People zhubajie;zhubajie=new People();}} 

3. 对象的内存模型

《Java 2 实用教程》课程学习(4)——第4章 类与对象

class People
{ int change;float height,weight;boolean bigear;String head;void speak(String s){ System.out.println(s);}} 
class A
{ public static void main(String args[]){ People zhubajie=new People();People sunwukong=new People();}} 

二、使用对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

三、对象的引用和实体

《Java 2 实用教程》课程学习(4)——第4章 类与对象

  • 2-3-java存在“垃圾收集”机制,这种机制周期性地检测某个实体是否已不再被任何对象所拥有,如果出现这样的实体,就释放实体占有的内存。P51注。
  • 7-People shasang;
  • 如果程序中使用了空对象,程序在运行时会出现异常:NullPointerException。由于对象是动态地分配实体,所以java的编译器对空对象不做检查。

四、参数传值

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

2.引用类型参数的传值

如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化。

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

4.3 static和this

一、实例变量和类变量的区别    

1.所有对象的类变量都被分配相同的一处内存。    

2.不同对象的实例变量将被分配不同的内存空间。    

3.类变量不仅可以通过某个对象访问,也可以直接通过类名访问。    

4.实例变量可以通过对象访问,不能使用类名访问。

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

Q1:OK

System.out.println(StaticFun.setA(121));可以写成:

System.out.println(setA(121));

Q2:NO

Q3:OK

Q4:ok

Q5:no

二、实例方法和类方法的区别    

1.类的实例方法,只有在该类的对象创建后才分配入口地址。从而该实例方法可以被该类创建的任何对象调用执行。      

2.类方法,在该类被加载到内存时,就分配了入口地址。从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。      

3.类方法只能操作类变量,不能操作实例变量,也不能调用实例方法。      

4.实例方法既能对类变量进行操作也能对实例变量进行操作。      

5.实例方法可以调用该类中的其他方法,类方法只能调用该类中的其他类方法

三、this

  • this关键字可以出现在类的实例方法中,代表使用该类的当前对象。  
  • this关键字也可以出现在类的构造方法中,代表使用该类所创建的对象。  
  • this关键字不能出现在类方法中。

【练习1】下列A类的类体中哪些代码是错误的?

《Java 2 实用教程》课程学习(4)——第4章 类与对象

【练习2】请说出A类中System.out.println的输出结果?

《Java 2 实用教程》课程学习(4)——第4章 类与对象

【练习3】请说出A类中System.out.println的输出结果?

《Java 2 实用教程》课程学习(4)——第4章 类与对象

4.4 包

《Java 2 实用教程》课程学习(4)——第4章 类与对象

二、包的引入

《Java 2 实用教程》课程学习(4)——第4章 类与对象

常见的JAVA API:

  • java.lang  提供基本的数据类型及操作,此包由编辑器自动地导入所有程序。  
  • java.util 提供高级数据类型及操作,如日期和时间操作。  
  • java.io 提供输入/输出流控制,含有支持输入和输出的类。  
  • java.awt 提供图形界面控制。  
  • java.awt.event 提供窗口事件处理,包括剪贴板、字符串发送器等。  
  • java.net 提供支持Internet协议的功能。利用java.net包,开发者可以编写自己的具有网络功能的程序。  
  • java.applet 提供实现浏览器环境中Applet的有关类和方法。  
  • java.sql 提供与数据库连接的接口。  
  • java.security 提供安全性方面的有关支持。利用其中的类可以对java程序加密,也可以把特定的Java Applet标记为“可信赖”,使它能够具有与Java Application相近的安全权限。

4.5 访问权限

《Java 2 实用教程》课程学习(4)——第4章 类与对象

class Tom
{private float weight;private float f(float a,float b){ ... }}class Jerry
{void g( ){ Tom cat=new Tom( );cat.weight=23f;           //非法cat.f(3f,4f);             //非法}}

将Tom修改为:

class Tom
{private float weight;private float f(float a,float b){ ... }void g( ){ Tom cat=new Tom( );cat.weight=23f;           cat.f(3f,4f); }}

二、public

  • 用public修饰的变量叫共有变量  
  • 用public修饰的方法叫共有方法  
  • 可以用public修饰类,这样的类叫共有类  
  • 共有类可以被同一个包中的其它类使用,也可以被不在同一个包中的其它类使用  
  • 共有变量和共有方法,可以被定义在其它类中的对象访问和修改

三、缺省(友好)

  • 如果变量和方法前没有修饰符,称这样的变量和方法为友好变量和友好方法  
  • 如果类的修饰符缺省,这样的类叫友好类  
  • 友好类可以被同一个包中的其它类使用,但不可以被不在同一个包中的其它类使用  
  • 友好变量和友好方法,可以被同一个包中的在其它类中定义的对象访问和修改

四、protected

  • protected修饰的变量和方法,称为受保护的变量和受保护的方法  
  • protected不能用来作类的修饰符  
  • protected修饰的成员,可以被三种类引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类。

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

本章着重介绍Java编程中类和对象等非常重要的概念。    

Java程序是由类组成的,编写Java程序的过程就是从现实世界中抽象出Java可实现的类并用合适的语句定义它们的过程,这个定义过程包括对类内各种属性和方法的定义,创建类的对象,也包括类间的各种关系和接口的定义。

上机实践3-实验1 类封装

编写一个Java应用程序,该程序中有3个类:Trangle、Lader和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下:

(1)Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边得功能。另外,Trangle类还具有一个boolean型的属性,该属性用来判断三个数能够构成一个三角形。

(2)Lader类具有类型为double的上底、下底、高、面积属性,具有返回面积的功能。

(3)Circle类具有类型为double的半径、周长和面积属性,具有返回周长、面积的功能。

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

实验后练习:

  • (1)程序中仅仅省略【代码15】,编译能通过吗?
  • (2)程序中仅仅省略【代码16】,编译能通过吗?
  • (3)程序中仅仅省略【代码15】,运行时出现怎样的异常提示?
  • (4)给Trangle类增加3个方法,分别用来返回3个边:sideA、sideB和sideC.
  • (5)让AreaAndLength类中的circle对象调用方法修改半径,然后输出修改后的半径以及修改半径后的圆的面积和周长。

上机实践3-实验2 实例成员与类成员

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

Example.java
class A
{   【代码1】 //声明一个float型实例变量a【代码2】            //声明一个float型类变量b,即static变量bvoid setA(float a){  【代码3】 //将参数a的值赋值给成员变量a}void setB(float b){  【代码4】//将参数b的值赋值给成员变量b}float getA(){  return a;}float getB(){  return b;}void inputA(){System.out.println(a);}static void inputB(){System.out.println(b);}
}
public class Example
{   public static void main(String args[]) { 【代码5】            //通过类名操作类变量b,并赋值100【代码6】           //通过类名调用方法inputB()A cat=new A();A dog=new A();【代码7】    //cat调用方法setA(int a)将cat的成员a的值设置为200【代码8】   //cat调用方法setB(int b)将cat的成员b的值设置为400【代码9】    //dog象调用方法setA(int a)将dog的成员a的值设置为150【代码10】   //dog调用方法setB(int b)将dog的成员b的值设置为300【代码11】   //cat调用inputA()。  【代码12】   //cat调用inputB()。  【代码13】   //dog调用inputA()。  【代码14】   //dog调用inputB()。   } 
}

实验后的练习:

  • (1)将inputA()方法中的System. out.println(a);    改写为System.out.println(a+b);    编译是否出错?为什么?
  • (2)将inputB()方法中的System.out.println(b);    改写为System. out.println(a+b);    编译是否出错?为什么?

上机实践3-实验3   使用package语句和import语句

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

《Java 2 实用教程》课程学习(4)——第4章 类与对象

SunRise.java
import tom.jiafei.*;
class SunRise 
{  public static void main(String args[ ]){  SquareEquation equation=new SquareEquation(4,5,1);equation.getRoots();equation.setCoefficient(-3,4,5);equation.getRoots();}
} 

《Java 2 实用教程》课程学习(4)——第4章 类与对象

 

  相关解决方案