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

时间:2022-09-18 10:08:31

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(类机制)的更多相关文章

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

    继承(inheritance)背后的核心思想是:       bonus = b;    }      } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...

  2. Java面向对象程序设计--与C++对比说明:系列1(面向对象基础)

         面向对象程序设计作为一种重要的程序设计思想,在近些年来得到广泛的推崇.而Java和C++更是面向对象程序设计语言中的翘楚,要彻底摸清面向对象程序设计的精髓和在实际应用中更加高效的进行代码设计 ...

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

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  4. 20175333曹雅坤 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

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

    2017-2018-2 20165318 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄  ...

  6. 20155209实验二《Java面向对象程序设计》

    20155209实验二<Java面向对象程序设计> 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计 ...

  7. 20155215 《Java程序设计》实验二( Java面向对象程序设计)实验报告

    20155215 <Java程序设计>实验二( Java面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉 ...

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

    20155306 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要 ...

  9. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

随机推荐

  1. 【转】What is an SDET&quest; Part 2 – Skill Matrix of SDET

    What is an SDET? Part 2 ---- Skill Matrix of SDET (Instead of naming it as part 2 of What is an SDET ...

  2. 递归将Map里的字段名由驼峰转为下划线

    导航 定位 概述 算法设计 递归技巧 代码实现 定位 本文适合于想要使用Java递归地将Map里的Key字段名从驼峰转为下划线,或者想了解如何处理任意递归的Map结构的筒鞋. 概述 在进行多语言混合编 ...

  3. Yii提供的Htmler助手checkboxList可自定义Checkbox输出格式

    foreach($catetags as $cate){ echo Html::checkboxList('category_id','',$cate,['item'=>'customCheck ...

  4. 为什么anylase和scenaio中的平均响应时间差别会这么大?

    场景里的响应时间截图如下所示: 结果里的响应时间截图如下所示:

  5. vc 判断哪个按键 被按下 消息 按键 状态

    测试Numlock 是否是亮的 环境控制台程序: #include "stdafx.h" #include <stdio.h> #include <conio.h ...

  6. bzoj 1295&colon; &lbrack;SCOI2009&rsqb;最长距离 暴力&plus;bfs最短路

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 题解: 对每个点暴力跑一遍bfs,看能够到达的最远位置,这里如果有障碍物则距离为1 ...

  7. FusionWidgets Bulb图

    1.数据源提供 Bulb.xml: <?xml version="1.0" encoding="UTF-8"?> <chart lowerLi ...

  8. javascript高级程序设计第3版——第一章概括

    最近发现Xmind思维导图是个好东西,刚好开始看书,被用来归纳最好不过了

  9. python BeautifulSoup

    之前解析LXML,用的是XPath,现在临时被抓取写爬虫,接人家的代码,看到用的是BeautifulSoup,稍微学了下,也挺好用的,简单记录下用法,有机会做下和Xpath的对比测试 初始化 from ...

  10. Eclipse------导入项目后出现javax&period;servlet&period;jsp cannot be resolved to a type

    报错信息:javax.servlet.jsp cannot be resolved to a type 原因1: 这个错误可能是服务器自带的servlet库未导入的原因. 解决方法: 右键项目&quo ...