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(类机制)的更多相关文章
- Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)
继承(inheritance)背后的核心思想是: bonus = b; } } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...
- Java面向对象程序设计--与C++对比说明:系列1(面向对象基础)
面向对象程序设计作为一种重要的程序设计思想,在近些年来得到广泛的推崇.而Java和C++更是面向对象程序设计语言中的翘楚,要彻底摸清面向对象程序设计的精髓和在实际应用中更加高效的进行代码设计 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20175333曹雅坤 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 2017-2018-2 20165318 实验三《Java面向对象程序设计》实验报告
2017-2018-2 20165318 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:孙晓暄 ...
- 20155209实验二《Java面向对象程序设计》
20155209实验二<Java面向对象程序设计> 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计 ...
- 20155215 《Java程序设计》实验二( Java面向对象程序设计)实验报告
20155215 <Java程序设计>实验二( Java面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉 ...
- 20155306 实验二 Java面向对象程序设计
20155306 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要 ...
- 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》
20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...
随机推荐
- Silverlight的ComboBox 的绑定和取值
Silverlight的ComboBox与winform中的ComboBox存在类似的地方,但也有不同之处,本章包含以下内容: 一.ComboBox 如何添加和绑定数据. 二.ComboBox 如何添 ...
- uvaLA4255 Guess BFS+拓扑排序
算法指南白书 思路:“连续和转化成前缀和之差” #include <stdio.h> #include <string.h> #include <iostream> ...
- android camera(一):camera模组CMM介绍
一.摄像头模组(CCM)介绍: 1.camera特写 摄像头模组,全称CameraCompact Module,以下简写为CCM,是影像捕捉至关重要的电子器件.先来张特写,各种样子的都有,不过我前一段 ...
- spring使用ehcache
spring本身内置了对Cache的支持,之前记录的是基于Java API的ConcurrentMap的CacheManager配置,现使用ehcache实现. 1.声明对cache的支持 <b ...
- C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...
- SQL 中having 和where的区别分析
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集 在select语句中可以使用groupby子 ...
- CSS实现圆角,三角,五角星,五边形,爱心,12角星,8角星,圆,椭圆,圆圈,八卦
转自:http://blog.csdn.net/chenhongwu666/article/details/38905803 CSS实现圆角,三角,五角星,五边形,爱心,12角星,8角星,圆,椭圆,圆 ...
- load 与initialize的调用顺序小结
开发中实用方法固然是最贴近应用的,当一些程序原理还是要先搞清晰,根据查找的一些资料,总结了一些load与initialize的调用. APP启动到执行main函数之前,程序就执行了很多代码 执行顺 ...
- JAVA-应用easyui
easyui下载地址:http://www.jeasyui.com/index.php 现在还easyui之后将其解压,解压之后将文件夹中的文件除了demo文件夹之外的文件放入到Eclipse的web ...
- CentOS系统下做nginx和tomcat负载均衡
系统总是频繁更新,为了避免更新系统的时候领导看不到东西,打算用ngix做代理,后台部署两个tomcat做负载均衡,避免更新一台就无法使用系统的问题,这两天看了写资料,把几个关键点记录在这里以便备忘. ...