Java面向对象程序设计--与C++对比说明:系列2(类机制)

1. Java中的包机制(Package):

1.1  
Java容许将一系列的类组合到一个叫package的集合中。package机制是一种非常好的管理工作的方式并可以将你自己的工作和系统或第三方提供的代码分开。

一个类(class)可以使用其本身所在包中的任何类和其他包中的任何public类。

注意:只能使用*号来导入一个单独的包中的所有的类。像这种java.*或java.*.*形式的包的导入都是错误的。

例如:有两个包com.a.b和com.a.b.c,那么com.a.b.*导入的类将不包括com.a.b.c下面的类。要想导入com.a.b.c下面的类,可以使用这样的形式import
com.a.b.c.*;

原因在于:从语法上讲,com.a.b和com.a.b.c之间毫无关系。

如何解决类名冲突问题?


import java.util.*;
import java.sql.*;

public class Sleep
{
    public static void main(String[] args) throws InterruptedException
    {
        Date today = new Date();
    }
}

上面这段代码中java.util包和java.sql包中都有一个名为Date的类,那么就会产生下面的编译错误:


Sleep.java:8: 错误: 对Date的引用不明确
        Date today = new Date();
        ^
  java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配
Sleep.java:8: 错误: 对Date的引用不明确
        Date today = new Date();
                         ^
  java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配
2 个错误


解决上面问题的办法是:

1)如果只使用两个Date类中的一个,比如java.sql.Date那么在上面两个import语句的基础上加入import java.sql.Date;
语句。

2) 如果两个Date类都要被使用,那么在使用类的时候带上类的路径全名:

java.util.Date date1 = new java.util.Date();

java.sql.Date  date2 = new java.util.Date();

可以将Java中的import看成是C++中namespace和using的类似!

1.2   Java SE 5.0 之后引入了静态导入机制(static import)


import static java.lang.System.*;
public class ImportTest
{
    public static void main(String[] args)
    {
        out.println("This is a static import!");
    }
}

当使用静态导入时,导入的包中的各个类的静态方法和静态域也会被导入,而不仅仅是类的导入。

静态导入机制的两个重要场景是:

1)使得数学函数以一种更加自然的方式被调用:


import static java.lang.Math.*;
public class ImportTest
{
    public static void main(String[] args)
    {
        int x = 2;
        int y = 3;
        System.out.println(sqrt(pow(x,2)+pow(y,2)));
    }
}

上面的例子中,我们使用了静态导入,那么我们就不用每次繁琐的使用Math.sqrt和Math.pow了。

2)处理一些笨重繁琐的常数;

1.3   将一个类添加到一个包中:

要将类放入到一个包中,需要将包的名称放到类所在的源文件的开始位置。如果没有在开始位置添加这个包名,那么这个类将会放入到默认包中,

而在Java的最新版本中,默认包下的类是无法通过import来进行导入的。

在测是包的路径时遇到了一些问题:


package com.jiangheng.Test;

public class TestPackage
{
    public static void main(String[] args)
    {
        System.out.println("This is the end of the world!");
    }
}

不管编译结果如何,最终形成的.class文件一定要放在 ./com/jiangheng/Test/ 目录下,这样java
com.jiangheng.Test.TestPackage 才能正确执行。

2.一些类的设计原则:

a. 除非有特别需要,否者将所有的字段都定义为private。

b. 尽量对数据进行初始化。

c.
在一个类中尽量避免使用太多的基本类型的情况!这一条的核心意思就是要以对象的思考方式去思考问题,而不是以一种“心中无对象”的的心态直接跳入细节设计之中。

d. 并不是所有的字段都需要访问器和修改器(有需要就定义,没有需要就不定义).

e.以一种形式化的方式来对类进行定义:

尽量以这样的方式来展开类的内容:

1) 公共特性;  (public features)

2) 包范围的特性; (package features)

3) 私有特性; (private features)

对于上面的每一个特性又可以通过一下方式展开:

-----实例方法(instance methods)

-----静态方法(static methods)

-----实例域(instance fields)

-----静态域(static fields)

f.将一个具有复杂功能的类分解成多个具有简单功能的简单类:

下面是表示一副牌的类:


public class CardDeck
{
    public CardDeck(){...};
    public void shuffle(){...};
    public int getTopValue(){...};
    public int getTopSuit(){...};

    private int[] value;
 //大小
    private int[] suit;
  //花色
}

显然上面的这个类是一个不好的实际,将对牌的表示和在牌上的操作混合在一起,可以将上面的类分解成下面的两个类:


public class CardDeck
{
     public CardDeck() {...}
     public void shuffle() {...}
     public Card getTop() {...}
     public void draw() {...}     

     private Card[] cards;       
}

public class Card
{
    public Card(int aValue,int aSuit) {...}   
    public int getValue() {...}
    public int getSuit() {...}

    private int value;       
}

g. 让你所建立的类名和方法名尽量的反应类和方法的特性:

Java面向对象程序设计--与C++对比说明:系列2(类机制)

时间: 2024-10-15 19:48:28

Java面向对象程序设计--与C++对比说明:系列2(类机制)的相关文章

Java面向对象程序设计--与C++对比说明:系列1

面向对象程序设计作为一种重要的程序设计思想,在近些年来得到广泛的推崇.而Java和C++更是面向对象程序设计语言中的翘楚,要彻底摸清面向对象程序设计的精髓和在实际应用中更加高效的进行代码设计,我们有必要对比一下Java和C++的在实现面向对象程序设计上的异同之处,对两种语言的细节之处做一个详尽的了解. 面向对象程序设计概念: 面向对象编程技术并不是简单的替代了结构化编程技术,而是在结构化编程的基础上做了一个很大的提升.很多面向对象技术仍然是建立在结构化编程技术之上.这里有一个很明显的是函数指针和

Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)

继承(inheritance)背后的核心思想是:可以在现有类的基础上创建自己的新类,在新类中继承原来类的方法和数据域,并添加适合当前应用场景的新的数据和方法. 1. 类,超类,子类 (class,superclass,subclass): Java 中的inheritance都是public inheritance,并不想C++中存在public,protected和private inheritance的分类. class subclass extends superclass; 这里有两个要

2017-2018-2 20165318 实验三《Java面向对象程序设计》实验报告

2017-2018-2 20165318 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄        学号:20165318 指导教师:娄嘉鹏                              实验日期:2018年4月27日 实验时间:13:45 - 3:25                    实验序号:实验三 实验名称:敏捷开发与XP实践 实验内容: XP基础 XP核心实践 相关工

实验二:Java面向对象程序设计

实验二 Java面向对象程序设计 目录 [一.单元测试和TDD](#first) [任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能](#firstTask) [任务二:以TDD的方式研究学习StringBuffer](#SecondTask) [二.面向对象三要素:封装.继承.多态](#Second) [任务三:使用StarUML对实验二中的代码进行建模](#ThirdTask) [三.设计模式](#third) [任务四:对MyDoc类进行扩充,让其支持Lon

2062326 齐力锋 实验四《Java面向对象程序设计Android开发》实验报告

北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构  班级: 1623  姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5月26日 实验密级:非密级 预习程度: 优良 实验时间: 2 Hours 仪器组次: 必修/选修: 必修 实验序号: 04 实验名称:Java面向对象程序设计Android开发 实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI

Java程序设计 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353  姓名:李海空  学号:20135329 成绩:             指导教师:娄嘉鹏      实验日期:2015.5.7 实验密级:         预习程度:         实验时间: 仪器组次:          必修/选修:            实验序号: 实验名称:       Java面向对象程序设计 实验目的与要求:实验内容 1. 初步掌握单元测试和TDD 2.

20135234马启扬 实验二 Java面向对象程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1352  姓名:马启扬  学号:20135234 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--22:50 仪器组次:34         必修/选修: 选修            实验序号:02 实验名称:实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和T

Java面向对象程序设计

北京电子科技学院(BESTI)                                                                                 实     验    报     告 课程:Java        班级:1352        姓名:马悦      学号:20135235 成绩:              指导教师:娄嘉鹏              实验日期:2015.05.07 实验密级:            预习程度:    

2062326 齐力锋 实验二《Java面向对象程序设计》实验报告

北京电子科技学院(BESTI) 实     验    报     告 课程:   程序设计与数据结构           班级:      1623           姓名:  齐力锋      学号: 20162326 成绩:             指导教师:   娄嘉鹏/王志强             实验日期: 2017年4月14日 实验密级:非密级         预习程度:   优良      实验时间: 2 Hours 仪器组次:          必修/选修:   必修