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

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

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

4.1 类及方法

二、类的声明

2.类头

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

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

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

例1

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();
  }
}

三、类体

2.方法

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

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

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

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

3.方法的调用

4.构造方法

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

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

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 对象

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. 为对象分配内存

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. 对象的内存模型

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();
    }
 } 

二、使用对象

三、对象的引用和实体

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

四、参数传值

2.引用类型参数的传值

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

4.3 static和this

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

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

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

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

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类的类体中哪些代码是错误的?

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

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

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 访问权限

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编程中类和对象等非常重要的概念。    

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

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

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

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

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

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

实验后练习:

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

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

Example.java
class A
{   
   【代码1】 //声明一个float型实例变量a
   【代码2】            
      //声明一个float型类变量b,即static变量b
    void 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语句

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();
    }
} 

 

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 4 实验2 一个简单的Java Applet程序 4 实验3 联合编译 5 上机实践2 基本数据类型与控制语句 6 实验1 输出希腊字母表 6 实验2 回文数 6 实验3 猜数字游戏 8 上机实践3 类与对象 9 实验1 三角形、梯形和圆形的类封装 9 实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19 实验2 比较日期的大小 21 实验3 处理大整数 22 上机实践6 组件及事件处理 23 实验1 算术测试 23 实验2 信号灯 25 实验3 布局与日历 28 上机实践7 组件及事件处理2 31 实验1 方程求根 31 实验2 字体对话框 34 实验3 英语单词拼写训练 37 上机实践8 多线程 41 实验1 汉字打字练习 41 实验2 旋转的行星 43 实验3 双线程接力 47 上机实践9 输入输出流 50 实验1 学读汉字 50 实验2 统计英文单词字 53 实验2 读取Zip文件 56 上机实践10 Java 的网络编程 57 实验1 读取服务器端文件 57 实验2 使用套接字读取服务器端对象 59 实验3 基于UDP的图像传输 62 上机实践11 数据结构 66 实验1 扫雷小游戏 66 实验2 排序与查找 70 实验3 使用TreeSet排序 72 上机实践12 java Swing 74 实验1 JLayeredPane分层窗格 74 实验2 使用表格显示日历 75 实验3 多文档界面(MDI) 78 上机实践1 初识Java 实验1 一个简单的应用程序 2.模板代码 Hello.java package 实验一; public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("你好,很高兴学习Java"); //命令行窗口输出"你好,很高兴学习Java" A a=new A(); a.fA(); } } class A { void fA() {System.out.println("we are student"); } } 实验2 一个简单的Java Applet程序 2.模板代码 FirstApplet.java import java.applet.*; import java.awt.*; public class FirstApplet extends Applet { public void paint(Graphics g) { g.setColor(Color.blue); g.drawString("这是一个Java Applet 程序",10,30);//在Java Applet绘制一行文字:“这是一个Java Applet 程序” g.setColor(Color.red); g.setFont(new Font("宋体",Font.BOLD,36)); g.drawString("我改变了字体",20,50);//在Java Applet绘制一行文字:“我改变了字体” } }实验3 联合编译 2.模板代码 public class MainClass { public static void main (String args[ ]) { System.out.println("你好,只需编译我") ; //命令行窗口输出"你好,只需编译我" A a=new A(); a.fA(); B b=new B(); b.fB(); } } public class A { void fA() {

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值