完整的java源程序应该包括下列部分:

1.package语句

l java编译器为每个类生成一个字节码文件,且文件名与类名相同,这就会带来一个问题:同名的类会发生冲突。

l 所以package的两个主要作用就呼之欲出了:管理类,解决命名冲突。

  例如:package com;public class Test{}

        package cn;public class Test{}

    虽然以上两个类同名,但是并不会出现命名冲突;也可以理解为其实包名就相当于一个人的姓氏,而类名就相当于一个人的名;而一个人的姓名是姓+名;所以以上两个类

  的全称分别是:com.Test、cn.Test;当然就不会出现命名冲突了;

l 一般地,我们将具有相同功能的类放在一个package中。

2.import语句

l import 代表此类中需要引入和封装的包,一般置顶。

1,加载已定义好的类或包
2,导入支持类(可以是JDK基础类或者自己编写的类),可以供本类调用方法和属性。

l import导入声明可分为两种: 
    1,单类型导入(single-type-import) 例:import java.util.ArrayList;  
    2,按需类型导入(type-import-on-demand)   例:import java.util.*;

l Import的使用主要是为了偷懒。Java为了解决命名冲突使用了package来管理类,那么问题就来了,如果在写代码的时候都使用类的全称,例如一下这样:

  1. java.io.InputStream is = java.lang.System.in;
  2. java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
  3. java.io.BufferedReader br = new java.io.BufferedReader(isr);

这样的代码看起来确实不是那么舒服,写起来更不舒服;所以我们使用了import,只需要在类声明前导入相关包:

  1. import java.lang.System;
  2.    import java.io.InputStream;
  3.    import java.io.InputStreamReader;
  4.    import java.io.BufferedReader 

代码就清爽多了:

  1. InputStream = System.in;
  2. InputStreamReader isr = new InputStreamReader(is);
  3. BufferedReader br = new BufferedReader(isr);

所以有人说import的使用就是一种偷懒的做法,这一点,我并不否认;

l Import后出现命名冲突,在使用Import偷懒的时候也会出一些问题;例如:有人在同时import java.awt.*;import java.util.*后,在代码里面使用List,这个时候就炸锅了,因为这两个下面都有List,编译器就蒙圈了,它不知道,你要使用哪一个List;所以这个时候就要指定清楚,你具体使用哪一个。比如Java.util.List;这样编译器就知道了。

l import可以使用通配符*,*代表某package下所有的class,不包括子目录。看到了吧,就是说*只能导入类不能导入子目录,比如 import java.awt.*之后,你还是不能使用 java.awt.event下面的类,因为event是个子包啊,这个子包下面的类,*就无能为力了。现在知道为什么不能,直接import Java.*了吧。

总之,在使用import的时候,最好还是使用单类型导入,总结起来好处有两个:(1)编译速度:虽然无论是哪种导入都不影响Java代码执行效率,但是在一个很大的项目中,它们会极大的影响编译速度. (2)命名冲突:解决避免命名冲突问题的答案就是使用全名.而按需导入恰恰就是使用导入声明初衷的否定.

3.类/接口定义部分

类或者定义部分就是Java源程序的主体了:

l 类定义

[修饰符]class 类名[extends 父类] [implements 接口名]{[各种属性][各种方法]}

例如:

  1. public class SearchDaoImpl extends BaseSearchDaoImpl implements SearchDao {
  2. protected final Log LOGGER = LogFactory.getLog(getClass());
  3. SearchConfigService searchConfigService;
  4. public SearchPage findPage(SearchPageable searchPageable) {
  5. return null;
  6. }  

l 接口定义

[修饰符]  interface 接口名 [ extends 父接口]  {[各种常量][各种方法的声明]}

例如:

public interface TipDao extends BaseDao<Tip, Long> {
    boolean termExists(String term);
}

注:

  一个java源程序至多只能有一个公共类的定义。

  若java源程序有一个公共类的定义,则该源文件名字必须与该公共类的名字完全相同。

  若源程序中不包含公共类的定义,则该文件名可以任意取名。

  若一个源程序中有多个类定义,则在编译时将为每个类生成一个。class文件。

Java源程序结构的更多相关文章

  1. java源程序---可执行文件(.exe)----安装包

    众所周知,java源程序都可以导出为(executable jar file)可执行的.jar文件,但是该.jar文件需要在jre环境下才能执行. 那么如何能在没有装jre的电脑上运行呢?(那就要顺带 ...

  2. Java 内存结构备忘录

    本文详细描述了 Java 堆内存模型,垃圾回收算法以及处理内存泄露的最佳方案,并辅之以图表,希望能对理解 Java 内存结构有所帮助.原文作者 Sumith Puri,本文系 OneAPM 工程师编译 ...

  3. Java内存结构、类的初始化、及对象构造过程

    概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下.与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码.数据:程序的执行过程其实依然是代码的执行及数据的 ...

  4. 使用递归算法结合数据库解析成java树形结构

    使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...

  5. JAVA循环结构

    JAVA循环结构:顺序结构只能执行一次,如果要执行多次需要用到循环 JAVA中的循环结构有while:do...while:for: 1.while循环:先判断布尔表达式中的值,若为true,执行循环 ...

  6. JVM规范系列第2章:Java虚拟机结构

    本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为 ...

  7. java内存结构学习的一种打开方式

    用Java开发已经四年,中途学了python,Scala,接触这些开发语言后,总感觉Java就像老奶奶裹脚——又臭又长.然,Java虐我千百遍,我待Java如初恋.聊起Java,不得不谈Java的内存 ...

  8. Java虚拟机 - 结构原理与运行时数据区域

    http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...

  9. Java选择结构和数组

    Java选择结构和数组 一.Switch语句 二.if和switch区别 推荐使用if 三.函数 Java中的函数和方法是同一个词 四.数组 4.1.数组常见错误 五.内存机制 六.转换成十六进制 移 ...

随机推荐

  1. git的初步使用---本地代码库的使用和提交

    git的初步使用---本地代码库的使用和提交 git是一个好东西,但对于新手来说,这个工具并不好使用,因为它里面涉及到很多东西,而这些东西新手一时间是无法理解的.不幸的是,本人就是新手一枚,所以,这里 ...

  2. [置顶] 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 上周为360全景项目引入了图片缓存模块.因为是在Android4.0平台以上运作,出于 ...

  3. 创建Sdcard

    下载好源码之后编译生成了模拟器,这个时候的模拟器是没有SDcard的.这个时候需要创建需要为虚拟机创建SDcard 我们创建mksdcard 256M <src>/out/target/p ...

  4. struts2标签库使用小结

    之前的demo中用了一些struts2标签,用的是struts2.2.1.1. Struts2的标签常常和OGNL(图对象导航语言)一起使用.有几点总结如下: [引用请注明出处:http://blog ...

  5. Python的下载和安装

    一.下载(官方下载地址) 地址:https://www.python.org/downloads/ 我的是window7系统 二.安装详细过程 在选择安装组件的一步时,勾上所有的组件: 特别要注意选上 ...

  6. 项目开发之分页---异步分页(ajax)

    PS:前面忘了给大家讲解后台需要做的 ,同步分页的时候,我们只需要定义一个方法,给前台传递一个page对象,前台接收到直接展示即可:异步分页要多一步,首先还是写一个方法,传递初始对象,后面的ajax返 ...

  7. 游戏对象、组件和Prefabs

    如标题所言,本文由3个部分组成,分别讲述游戏对象.组件和Prefabs(预设体). 1. 游戏对象 任何游戏对象都由组件组成,组件是实现一切功能所必需的.我们创建的对象会在Hierarchy视图中显示 ...

  8. C语言之switch

    一 switch的语法 switch(表达式){ case 常量表达式1: 代码块1 break; case 常量表达式2: 代码块2 break; case 常量表达式3: 代码块3 break; ...

  9. 双色球机选算法java实现

    双色球机选算法java实现 一.代码 package com.hdwang; import java.util.Random; /** * Created by admin on 2017/1/10. ...

  10. 话说Angularjs的$resource模块

    上一篇中讲到使用$http同服务器进行通信,但是功能上比较简单,AngularJS还提供了另外一个可选的服务$resource,使用它可以非常方便的同支持restful的服务单进行数据交互. 安装 n ...