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之 ...
随机推荐
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
- Silverlight的ComboBox 的绑定和取值
Silverlight的ComboBox与winform中的ComboBox存在类似的地方,但也有不同之处,本章包含以下内容: 一.ComboBox 如何添加和绑定数据. 二.ComboBox 如何添 ...
- Bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 二分
1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1272 Solve ...
- MySQL开启远程链接(2014.12.12)
MySQL默认是关闭远程链接的,只能通过localhost访问本地数据库 如果不是本地访问就需要打开MySQL的远程连接: 基本步骤其实很简单: 1.进入mysql 2.依次运行下面的命令(黄色的为命 ...
- noip 2015 提高组
算是填个坑吧 , QwQ Day 1 第一题很水,就是考代码能力 ,直接贴代码. #include <iostream> #include <cstdlib> #include ...
- Java多线程小结
简述 Java是支持多线程编程的语言,线程相比于进程更加轻量级,线程共享相同的内存空间,但是拥有独立的栈.减少了进程建立.销毁的资源消耗.jdk1.5后对java的多线程编程提供了更完善的支持,使得j ...
- android实习程序7——通话记录显示
下载SQLiteSpy.exe 打开模拟器5554 打开perspective,选择DDMS 打开Devices,确认存在emulator-5554 打开file Explorer 打开data文件夹 ...
- IOS开发之网络开发工具
IOS开发之网络开发工具 做移动端开发 常常会涉及到几个模块:1.网络检測 2.网络请求get和post请求 3.文件上传 4.文件下载 5.断点续传 如今将这些一一分享给大家 ,也欢迎 ...
- 史上最全的iOS各种设备信息获取总结
来源:si1ence 链接:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述一下各种信息 ...
- iTunes无法验证服务器“s.mzstatic.com.”的身份
修改hosts文件,在里面添上一行 23.214.233.166 s.mzstatic.com