当前位置:首页 » 编程软件 » clong编译器

clong编译器

发布时间: 2022-09-22 03:54:19

java语言中Object类定义了哪11种方法

Java中所有类(包括用户自己定义的类)都自动继承Object类,即Object类是所有类的父类。

Object中常用方法:

public boolean equals(Object obj)

比较当前对象与obj是否为同一对象,返回值:ture/false

public String toString()

返回当前对象的字符串表达形式

public native int hashCode();

返回对象的Hash码。Hash码是标志对象的唯一值,Hash码相同的对象是同一对象

protected void finalize()throws Throwable

对象销毁时被调用

以下三个函数用于控制线程

public final native void notify();public final native void notifyAll();public final native void wait();

native型方法指由C++语言编写的方法,Java解释器对其进行转义后才执行。

“==”与equals()

"==" 一般用于基本数据类型比较。若用作两个引用对象比较,仅当引用变量引用同一个对象时,才返回true,否则false。

void EqualCompare()
{
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";

//未使用new,s4引用既存的对象(编译器创建对象之前先进行检测"Hello"是否已经存在,若存在,则返回原对象的引用)
System.out.println(s1.equals(s2)); //truex1行
System.out.println(s1 ==s2); // false 两变量引用不同对象
System.out.println(s3.equals(s4)); //true 两变量引用相同对象
System.out.println(s3 ==s4); // true 两变量引用相同对象
}

比较对象时,一般用equal()方法。

Object类方法定义:public boolean equals(Object obj){ return (this == obj);}

不同的类可方便的对该对象进行覆盖。String类就覆盖了Object类的equals()方法,所以x1行输出true.

a==b 如果a,b引用同一对象,则返回true;

a.equals(b) 如果a对象内容和b对象内容相同,则返回true

如果未重载equals()方法的类对象使用该方法与另一个对象进行比较,则调用Object的equals()方法,仍然是对象的比较,返回值为false。

㈡ 关于C++ Primer中“15.8.2复制未知类型”一段代码的错误提示

没什么原因,微软编译器的问题,VC9似乎可以了。换成GCC完全可以的。别太依赖某一个编译器,多尝试几个看看。

可以这样设计:
void *clone() const
{
return new Bulk_item(*this);
}
然后强制转化void *指针,但是强制转化类型就体现不出虚函数的特点了,这只是一个折衷的方法。

一楼的说也有道理的,但是你的题目给出的是复制未知类型,那样的话就不是复制未知类型了。
至于虚函数重写的返回值问题,你这种写法是对的,这是C++新标准加进去的,只不过不是所有编译器都实现了。这是一个例外:当基类虚函数返回是指针或者引用时,派生类也可以随着改变返回类型,该返回类型应该为基类返回的类或者其派生类的指针或引用。

㈢ c# clone 使用问题

想使用当前对象的拷贝吗 ?
Matrix result=this.Clone() as Matrix;
这一句Matrix 中你没有定义Clone()方法,需要实现Icloneable接口,就一个clone()方法。
注意 protected double[] elements = null不能拷贝

㈣ 为什么数组可以直接调用clone()方法

该问题从clone()方法开始引出。

clone()是基类Object类中的一个protected方法。

对该方法做以下测试。

1.在类A中调用类A实例a的clone()方法

public class A implements Cloneable {
public static void main(String[] args) throws CloneNotSupportedException {
A a = new A(); // 调用正确
A a2 = (A) a.clone();
}
}

以上调用成功,因为A是object的子类,继承了Object中的clone()方法,所以可以直接调用。

2.在类B中调用类A实例a的clone()方法

public class B { public static void main(String[] args) {
A a = new A(); // 调用失败
a.clone();
}
}

错误信息:

4.提问

  • Java中是否有一个类对应数组?数组在jvm中是一个怎样的存在?

  • 数组的clone()方法是怎么实现的?为什么可以直接调用?为什么是public的?

  • 数组的.length方法是怎么实现的?为什么IDE点不进去源码

  • 参考

  • 一些参考,可能对可能不对的解释。

  • 其实是有对应的类的,但不是Java的类,是JVM编译的时候实现的

  • 这个类的命名,如int数组为[I,如String数组为[Ljava.lang.String;,如A数组为[Ltest.cloneTest.A;。

  • 用.getClass().getName()和.getClass().getInterfaces()即可知道该特殊类的类名和该类实现的接口。

  • 得到该类实现了Cloneable和Serializable接口。和Object中写明的Note that all arrays are considered to implement the interface Cloneable吻合。

  • 猜测是Java编译器允许的数组定义的语法糖,其实JVM会生成一个类,该类实现了Cloneable和Serializable接口,并且有一个public的clone()方法,可以在其他类中直接调用。(其实没有这个方法,可以通过.get.getMethods()进行验证)

  • 至于数组的length属性,可能是直接保存在这个特殊的类的类头部中了,毕竟数组长度是不能修改的,直接保存着是完全符合逻辑的。

编程常用的英文有哪些

application 应用程式 应用、应用程序
application framework 应用程式框架、应用框架 应用程序框架
architecture 架构、系统架构 体系结构
argument 引数(传给函式的值)。叁见 parameter 叁数、实质叁数、实叁、自变量
array 阵列 数组
arrow operator arrow(箭头)运算子 箭头操作符
assembly 装配件
assembly language 组合语言
assert(ion) 断言
assign 指派、指定、设值、赋值 赋值
assignment 指派、指定 赋值、分配
assignment operator 指派(赋值)运算子 = 赋值操作符
associated 相应的、相关的 相关的、关联、相应的
associative container 关联式容器(对应 sequential container) 关联式容器
atomic 不可分割的 原子的
attribute 属性 属性、特性
audio 音讯 音频
A.I. 人工智能 人工智能
background 背景 背景(用于图形着色)
后台(用于行程)
backward compatible 回溯相容 向下兼容
bandwidth 频宽 带宽
base class 基础类别 基类
base type 基础型别 (等同于 base class)
batch 批次(意思是整批作业) 批处理
benefit 利益 收益
best viable function 最佳可行函式 最佳可行函式
(从 viable functions 中挑出的最佳吻合者)
binary search 二分搜寻法 二分查找
binary tree 二元树 二叉树
binary function 二元函式 双叁函数
binary operator 二元运算子 二元操作符
binding 系结 绑定
bit 位元 位
bit field 位元栏 位域
bitmap 位元图 位图
bitwise 以 bit 为单元逐一┅
bitwise 以 bit 为单元进行复制;位元逐一复制 位拷贝
block 区块,区段 块、区块、语句块
boolean 布林值(真假值,true 或 false) 布尔值
border 边框、框线 边框
brace(curly brace) 大括号、大括号 花括号、花括号
bracket(square brakcet) 中括号、中括号 方括号、方括号
breakpoint 中断点 断点
build 建造、构筑、建置(MS 用语)
build-in 内建 内置
bus 汇流排 总线
business 商务,业务 业务
buttons 按钮 按钮
byte 位元组(由 8 bits 组成) 字节
cache 快取 高速缓存
call 呼叫、叫用 调用
callback 回呼 回调
call operator call(函式呼叫)运算子调用操作符
(同 function call operator)
candidate function 候选函式 候选函数
(在函式多载决议程序中出现的候选函式)
chain 串链(例 chain of function calls) 链
character 字符 字符
check box 核取方块 (i.e. check button) 复选框
checked exception 可控式异常(Java)
check button 方钮 (i.e. check box) 复选按钮
child class 子类别(或称为derived class, subtype) 子类
class 类别 类
class body 类别本体 类体
class declaration 类别宣告、类别宣告式 类声明
class definition 类别定义、类别定义式 类定义
class derivation list 类别衍化列 类继承列表
class head 类别表头 类头
class hierarchy 类别继承体系, 类别阶层 类层次体系
class library 类别程式库、类别库 类库
class template 类别模板、类别范本 类模板
class template partial specializations
类别模板偏特化 类模板部分特化
class template specializations
类别模板特化 类模板特化
cleanup 清理、善后 清理、清除
client 客端、客户端、客户 客户
client-server 主从架构 客户/服务器
clipboard 剪贴簿 剪贴板
clone 复制 克隆
collection 群集 集合
combo box 复合方块、复合框 组合框
command line 命令列 命令行
(系统文字模式下的整行执行命令)
communication 通讯 通讯
compatible 相容 兼容
compile time 编译期 编译期、编译时
compiler 编译器 编译器
component 组件 组件
composition 复合、合成、组合 组合
computer 电脑、计算机 计算机、电脑
concept 概念 概念
concrete 具象的 实在的
concurrent 并行 并发
configuration 组态 配置
connection 连接,连线(网络,资料库) 连接
constraint 约束(条件)
construct 构件 构件
container 容器 容器
(存放资料的某种结构如 list, vector...)
containment 内含 包容
context 背景关系、周遭环境、上下脉络 环境、上下文
control 控制元件、控件 控件
console 主控台 控制台
const 常数(constant 的缩写,C++ 关键字)
constant 常数(相对于 variable) 常量
constructor(ctor) 建构式 构造函数
(与class 同名的一种 member functions)
(v) 复制、拷贝 拷贝
(n) 复件, 副本
cover 涵盖 覆盖
create 创建、建立、产生、生成 创建
creation 产生、生成 创建
cursor 游标 光标
custom 订制、自定 定制
data 资料 数据
database 资料库 数据库
database schema 数据库结构纲目
data member 资料成员、成员变数 数据成员、成员变量
data structure 资料结构 数据结构
datagram 资料元 数据报文
dead lock 死结 死锁
debug 除错 调试
debugger 除错器 调试器
declaration 宣告、宣告式 声明
dection 推导(例:template argument dection) 推导、推断
default 预设 缺省、默认
defer 延缓 推迟
define 定义 预定义
definition 定义、定义区、定义式 定义
delegate 委派、委托、委任 委托
delegation (同上)
demarshal 反编列 散集
dereference 提领(取出指标所指物体的内容) 解叁考
dereference operator dereference(提领)运算子 * 解叁考操作符
derived class 衍生类别 派生类
design by contract 契约式设计
design pattern 设计范式、设计样式 设计模式
※ 最近我比较喜欢“设计范式”一词
destroy 摧毁、销毁
destructor 解构式 析构函数
device 装置、设备 设备
dialog 对话窗、对话盒 对话框
directive 指令(例:using directive) (编译)指示符
directory 目录 目录
disk 碟 盘
dispatch 分派 分派
distributed computing 分布式计算 (分布式电算) 分布式计算
分散式计算 (分散式电算)
document 文件 文档
dot operator dot(句点)运算子 . (圆)点操作符
driver 驱动程式 驱动(程序)
dynamic binding 动态系结 动态绑定
efficiency 效率 效率
efficient 高效 高效
end user 终端用户
entity 物体 实体、物体
encapsulation 封装 封装
enclosing class 外围类别(与巢状类别 nested class 有关)外围类
enum (enumeration) 列举(一种 C++ 资料型别) 枚举
enumerators 列举元(enum 型别中的成员) 枚举成员、枚举器
equal 相等 相等
equality 相等性 相等性
equality operator equality(等号)运算子 == 等号操作符
equivalence 等价性、等同性、对等性 等价性
equivalent 等价、等同、对等 等价
escape code 转义码 转义码
evaluate 评估、求值、核定 评估
event 事件 事件
event driven 事件驱动的 事件驱动的
exception 异常情况 异常
exception declaration 异常宣告(ref. C++ Primer 3/e, 11.3) 异常声明
exception handling 异常处理、异常处理机制 异常处理、异常处理机制
exception specification 异常规格(ref. C++ Primer 3/e, 11.4) 异常规范
exit 退离(指离开函式时的那一个执行点) 退出
explicit 明白的、明显的、显式 显式
export 汇出 引出、导出
expression 运算式、算式 表达式
facility 设施、设备 设施、设备
feature 特性
field 栏位,资料栏(Java) 字段, 值域(Java)
file 档案 文件
firmware 韧体 固件
flag 旗标 标记
flash memory 快闪记忆体 闪存
flexibility 弹性 灵活性
flush 清理、扫清 刷新
font 字型 字体
form 表单(programming 用语) 窗体
formal parameter 形式叁数 形式叁数
forward declaration 前置宣告 前置声明
forwarding 转呼叫,转发 转发
forwarding function 转呼叫函式,转发函式 转发函数
fractal 碎形 分形
framework 框架 框架
full specialization 全特化(ref. partial specialization)
function 函式、函数 函数
function call operator 同 call operator
function object 函式物件(ref. C++ Primer 3/e, 12.3) 函数对象
function overloaded resolution
函式多载决议程序 函数重载解决(方案)
functionality 功能、机能 功能
function template 函式模板、函式范本 函数模板
functor 仿函式 仿函式、函子
game 游戏 游戏
generate 生成
generic 泛型、一般化的 一般化的、通用的、泛化
generic algorithm 泛型演算法 通用算法
getter (相对于 setter) 取值函式
global 全域的(对应于 local) 全局的
global object 全域物件 全局对象
global scope resolution operator
全域生存空间(范围决议)运算子 :: 全局范围解析操作符
group 群组
group box 群组方块 分组框
guard clause 卫述句 (Refactoring, p250) 卫语句
GUI 图形接口 图形界面
hand shaking 握手协商
handle 识别码、识别号、号码牌、权柄 句柄
handler 处理例程 处理函数
hard-coded 编死的 硬编码的
hard- 硬拷图 屏幕截图
hard disk 硬盘 硬盘
hardware 硬体 硬件
hash table 杂凑表 哈希表、散列表
header file 表头档、标头档 头文件
heap 堆积 堆
hierarchy 阶层体系 层次结构(体系)
hook 挂钩 钩子
hyperlink 超链结 超链接
icon 图示、图标 图标
IDE 整合开发环境 集成开发环境
identifier 识别字、识别符号 标识符
if and only if 若且唯若 当且仅当
Illinois 伊利诺 伊利诺斯
image 影像 图象
immediate base 直接的(紧临的)上层 base class。 直接上层基类
immediate derived 直接的(紧临的)下层 derived class。 直接下层派生类
immutability 不变性
immutable 不可变(的)
implement 实作、实现 实现
implementation 实作品、实作体、实作码、实件 实现
implicit 隐喻的、暗自的、隐式 隐式
import 汇入 导入
increment operator 累加运算子 ++ 增加操作符
infinite loop 无穷回圈 无限循环
infinite recursive 无穷递回 无限递归
information 资讯 信息
infrastructure 公共基础建设
inheritance 继承、继承机制 继承、继承机制
inline 行内 内联
inline expansion 行内展开 内联展开
initialization 初始化(动作) 初始化
initialization list 初值列 初始值列表
initialize 初始化 初始化
inner class 内隐类别 内嵌类
instance 实体 实例
(根据某种表述而实际产生的“东西”)
instantiated 具现化、实体化(常应用于 template) 实例化
instantiation 具现体、具现化实体(常应用于 template) 实例
integer (integral) 整数(的) 整型(的)
integrate 整合 集成
interacts 交谈、互动 交互
interface 接口 接口
for GUI 接口 界面
interpreter 直译器 解释器
invariants 恒常性,约束条件 约束条件
invoke 唤起 调用
iterate 迭代(回圈一个轮回一个轮回地进行) 迭代
exception 异常情况 异常
exception declaration 异常宣告(ref. C++ Primer 3/e, 11.3) 异常声明
exception handling 异常处理、异常处理机制 异常处理、异常处理机制
exception specification 异常规格(ref. C++ Primer 3/e, 11.4) 异常规范
exit 退离(指离开函式时的那一个执行点) 退出
explicit 明白的、明显的、显式 显式
export 汇出 引出、导出
expression 运算式、算式 表达式
facility 设施、设备 设施、设备
feature 特性
field 栏位,资料栏(Java) 字段, 值域(Java)
file 档案 文件
firmware 韧体 固件
flag 旗标 标记
flash memory 快闪记忆体 闪存
flexibility 弹性 灵活性
flush 清理、扫清 刷新
font 字型 字体
form 表单(programming 用语) 窗体
formal parameter 形式叁数 形式叁数
forward declaration 前置宣告 前置声明
forwarding 转呼叫,转发 转发
forwarding function 转呼叫函式,转发函式 转发函数
fractal 碎形 分形
framework 框架 框架
full specialization 全特化(ref. partial specialization)
function 函式、函数 函数
function call operator 同 call operator
function object 函式物件(ref. C++ Primer 3/e, 12.3) 函数对象
function overloaded resolution
函式多载决议程序 函数重载解决(方案)
functionality 功能、机能 功能
function template 函式模板、函式范本 函数模板
functor 仿函式 仿函式、函子
game 游戏 游戏
generate 生成
generic 泛型、一般化的 一般化的、通用的、泛化
generic algorithm 泛型算法 通用算法
getter (相对于 setter) 取值函式
global 全域的(对应于 local) 全局的
global object 全域物件 全局对象
global scope resolution operator
全域生存空间(范围决议)运算子 :: 全局范围解析操作符
group 群组
group box 群组方块 分组框
guard clause 卫述句 (Refactoring, p250) 卫语句
GUI 图形接口 图形界面
hand shaking 握手协商
handle 识别码、识别号、号码牌、权柄 句柄
handler 处理例程 处理函数
hard-coded 编死的 硬编码的
hard- 硬拷图 屏幕截图
hard disk 硬盘 硬盘
hardware 硬体 硬件

㈥ java关于clone的问题

嗯,正常情况下,Object.clone()会正确返回一个当前对象的一个复本。
除非当前对象没有实现java.lang.Cloneable。

你的程序直接运行没有错误,无论在JDK1.3\1.4\1.5\1.6下都是正确的。
看了java的规范,理论上任何JDK都应该实现Object.clone()的。

那么反过来考虑,如果要产生你那个NullPointerException,必须使clone()返回null,那么只有两种可能: Object.clone()返回null或者抛出异常。
进而推论为Account对象没有实现 java.lang.Cloneable!

因此,我猜测在你程序的同一个目录下,还有个Cloneable.java,定义了一个自定义的Cloneable,或者你给的这段程序少了下面一段:

interface Cloneable {
public Object clone();
}

我试了一下,如果有个自定义的Cloneable,那么编译器就不会认为Account类实现了java.lang.Cloneable,因此Object.clone()就会抛出异常了。

㈦ 树莓派 编译 platform选哪个

1、获取升级所需源码

1)下载地址:
官方网址:https://github.com/raspberrypi
上面列出了树莓派所有的开源软件:
firmware:树莓派的交叉编译好的二进制内核、模块、库、bootloader
linux:内核源码
tools:编译内核和其他源码所需的工具——交叉编译器等
我们只需要以上三个文件即可,下面的工程可以了解一下

documentation:树莓派离线帮助文档,教你如何使用、部署树莓派(树莓派官方使用教程)
userland:arm端用户空间的一些应用库的源码——vc视频硬浮点、EGL、mmal、openVG等
hats:Hardware Attached on Top,树莓派 B+型板子的扩展板资料
maynard:一个gtk写成的桌面环境
scratch:一个简易、可视化编程环境
noobs:一个树莓派镜像管理工具,他可以让你在一个树莓派上部署多个镜像
weston:一个应用程序
target_fs:树莓派最小文件系统,使用busybox制作
quake3:雷神之锤3有线开发源码firmwareb
2)下载方法:
a、网页直接下载:

点到所需要下载的工程,左上角选版本,右方有一个download ZIP按钮可直接下载(笔者下载完成后,在linux中解压提示出错,windows又非常慢切内核建议不要在windows环境解压,所以笔者不建议使用这种办法)

b、使用git下载
$ mkdir raspeberrypi_src
$ cd raspberrypi_src
$ git clone git://github.com/raspberrypi/firmware.git
$ git clone git://github.com/raspberrypi/linux.git
$ git clone git://github.com/raspberrypi/tools.git

会得到三个文件夹
firmware linux tools

2、编译、提取内核及其模块

1)获得内核配置文件
在运行的树莓派中运行:
$ls /proc/
可看到一个叫config.gz的文件,他是当前的树莓派配置选项记录文件,我们将他拷出,放入我们的内核源码目录树下

$cp /proc/config /home/pi
我们这里使用前面交过的samba拷出并拷入内核源码目录下,不熟悉的人可参考前面文章

在linux内核源码下执行:
$zcat config.gz > .config

2)配置、编译内核
a、修改内核源码makefile ARCH类型和编译器路径
$vi Makefile +195
找到以上类似代码,改为如图所示

b、查看、修改配置选项
$make menuconfig
可出现以下界面

如果不做修改,直接选中exit即可(注意使用键盘操作)

c、编译内核镜像
$make
在arch/arm/boot目录下可以看到一个叫zImage的文件,就是我们新的内核

但是树莓派需要另外一种格式的镜像,需要进行处理一下,执行以下命令
$cd tools/mkimage

$./imagetool-uncompressed.py ../../linux/arch/arm/boot/zImage
即可在当前文件夹下看到一个叫:kernel.img的文件,就是我们需要的新内核了

d、提取moles
上一步其实不但编译出来了内核的源码,一些模块文件也编译出来了,这里我们提取一下
$cd raspberrypi_src
$mkdir moles
$cd linux
$ make moles_install INSTALL_MOD_PATH=../moles

即可在moles得到我们需要的模块文件

2、升级RPi的kernel、Firmware、lib
将SD卡拔下插在电脑上(可使用读卡器)
1)升级内核
将新编好的内核拷入SD卡,改名为:kernel_new.img
打开boot目录下
找到config.txt文件,加入:kernel=kernel_new.img这一行

2)升级boot
将firmware/boot/目录下 以下文件拷入SD卡boot目录:fbootcode.bin fixup.dat fixup_cd.dat start.elf

3)更新vc库及内核moles
将第3步d步中编译出来的moles/lib/moles拷入树莓派文件系统/lib下

㈧ java编程,创建两个异常,传递相应得字符串作为错误提示参数给两个异常的构造器

不受检异常:
一般情况下 Error 和 RuntimeException 的子类所描述的错误和运行时异常都是 Unchecked Exception,即对有可能抛出这些错误或运行时异常的代码段可以作异常捕获处理或对包含它们的方法做异常抛出声明,但这不是必须的。如果没有捕获和抛出声明也一样能通过编译器的语法检测正常编译。比如:OutOfMemoryError 因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该错误。像这样严重的异常情况如果出现,你即便捕获到了也不大可能通过异常处理解决此异常情况,所以不是必须(当然也没必要或不应该)捕获它们或作抛出声明。对于运行时异常,例如:NullPointerExcetion 如果代码编写的没有漏洞,空指针异常完全可以避免(通过 if (s != null) s.doSomething();),所以同样不应该捕获或声明抛出。虽然运行时异常绝大多数不应捕获,但有时做捕获处理有利于简化代码的逻辑,例如:将字符串解析成整数的 Integer.parseInt(String s) 方法,如果字符串格式不正确可能抛出 NumberFormatException 这个运行时异常,作捕获处理会比在解析前用正则表达式先校验其格式方便得多。
常见的不受检异常有:(运行时异常)
1.类型转换异常(ClassCastException)
2.数组超界异常(ArrayIndexOutBoundsException)
3.指定数组维数为负值异常(NegativeArraySizeException)
4.算术异常(ArithmeticException)
5.Java系统内部异常(IncompatibleTypeException)
6.内存溢出异常(OutOfMemoryException)
7.没有找到类定义异常(NoClassDefFoundException)
8.空指针异常(NullPointerException)

受检异常:
这以上之外的其它异常都是 Checked Exception,分别描述了不同的异常情况,对于这些异常都应该也必须作异常捕获处理或对方法作异常抛出声明,否则代码通不过编译器编译
常见受检异常:(非运行时异常)
1.ClassNotFoundException:找不到类或接口所产生的异常
2.CloneNotSupportedException:使用对象的clone方法,但无法执行Cloneable所产生的异常.
3.IllegalAccessException:类定义不明确所产生的异常
4.IOException:在一般情况下不能完成IO操作所产生的异常.
5.EOFException:打开文件没有数据可以读取所产生的异常
6.FileNotFoundException:在文件系统中,找不到文件名称或路径所产生的异常
7.InterruptedIOException:目前线程等待执行,另一线程中断目前线程IO运行所产生的异常

public class ChackedException extends ClassNotFoundException {
public ChackedException(){
super("抛出受检异常");
}

public ChackedException(String massage){
super(massage);
}

}

/**
* 这里继承的是,是属于不受检的异常,
* 这里继承哪个都行,只要是不受检的异常类就行。
* @author Administrator
*
*/
public class UnCheckedException extends {
public UnCheckedException(){
super("抛出不受检异常");
}

public UnCheckedException(String massage){
super(massage);
}
}

import java.util.*;

public class ExceptionTest {

/**
* @param args
*/
public static void main(String[] args) throws ChackedException{
// TODO 自动生成方法存根
int number = new Random().nextInt(100);
System.out.println("number = " + number);
if(number > 50 ){
try{
throw new ChackedException();
}catch(ChackedException e){
System.err.println(e.getMessage());
}finally{
System.out.println("finally in chacked");

}
}

if(number < 20){
try{
throw new UnCheckedException();
}catch(UnCheckedException e){
System.err.println(e.getMessage());
}finally{
System.out.println("finally in unchacked");
}

}

}

}

总结:不受检异常可以捕获或抛出,也可以不捕获不抛出,这时也能够通过编译,只会在运行是出现异常时终止程序.

受检异常必须捕获或抛出,否则就通不过编译.

㈨ JAVA编码规范

(1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。
Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者e等,全部都应小写(这也是Java 1.1和Java 1.2的区别之一)。
(2) 为了常规用途而创建一个类时,请采取"经典形式",并包含对下述元素的定义:
equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(3) 对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。
(4) 应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。
(5) 设计一个类时,请设身处地为客户程序员考虑一下(类的使用方法应该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进行哪些形式的修改,想想用什么方法可把它们变得更简单)。
(6) 使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议:
一个复杂的开关语句:考虑采用"多形"机制
数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现
许多成员变量在特征上有很大的差别:考虑使用几个类
(7) 让一切东西都尽可能地"私有"--private。可使库的某一部分"公共化"(一个方法、类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,隐私是特别重要的一个因素--只有private字段才能在异步使用的情况下受到保护。
(8) 谨惕"巨大对象综合症"。对一些习惯于顺序编程思维、且初涉OOP领域的新手,往往喜欢先写一个顺序执行的程序,再把它嵌入一个或两个巨大的对象里。根据编程原理,对象表达的应该是应用程序的概念,而非应用程序本身。
(9) 若不得已进行一些不太雅观的编程,至少应该把那些代码置于一个类的内部。
(10) 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作(参见第14章14.1.2小节的"用内部类改进代码")。
(11) 尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。
(12) 避免使用"魔术数字",这些数字很难与代码很好地配合。如以后需要修改它,无疑会成为一场噩梦,因为根本不知道"100"到底是指"数组大小"还是"其他全然不同的东西"。所以,我们应创建一个常数,并为其使用具有说服力的描述性名称,并在整个程序中都采用常数标识符。这样可使程序更易理解以及更易维护。
(13) 涉及构建器和异常的时候,通常希望重新丢弃在构建器中捕获的任何异常--如果它造成了那个对象的创建失败。这样一来,调用者就不会以为那个对象已正确地创建,从而盲目地继续。
(14) 客户程序员用完对象以后,若你的类要求进行任何清除工作,可考虑将清除代码置于一个良好定义的方法里,采用类似于cleanup()这样的名字,明确表明自己的用途。除此以外,可在类内放置一个boolean(布尔)标记,指出对象是否已被清除。在类的finalize()方法里,请确定对象已被清除,并已丢弃了从RuntimeException继承的一个类(如果还没有的话),从而指出一个编程错误。在采取象这样的方案之前,请确定finalize()能够在自己的系统中工作(可能需要调用System.runFinalizersOnExit(true),从而确保这一行为)。
(15) 在一个特定的作用域内,若一个对象必须清除(非由垃圾收集机制处理),请采用下述方法:初始化对象;若成功,则立即进入一个含有finally从句的try块,开始清除工作。
(16) 若在初始化过程中需要覆盖(取消)finalize(),请记住调用super.finalize()(若Object属于我们的直接超类,则无此必要)。在对finalize()进行覆盖的过程中,对super.finalize()的调用应属于最后一个行动,而不应是第一个行动,这样可确保在需要基础类组件的时候它们依然有效。
(17) 创建大小固定的对象集合时,请将它们传输至一个数组(若准备从一个方法里返回这个集合,更应如此操作)。这样一来,我们就可享受到数组在编译期进行类型检查的好处。此外,为使用它们,数组的接收者也许并不需要将对象"造型"到数组里。
(18) 尽量使用interfaces,不要使用abstract类。若已知某样东西准备成为一个基础类,那么第一个选择应是将其变成一个interface(接口)。只有在不得不使用方法定义或者成员变量的时候,才需要将其变成一个abstract(抽象)类。接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具体的实施细节。
(19) 在构建器内部,只进行那些将对象设为正确状态所需的工作。尽可能地避免调用其他方法,因为那些方法可能被其他人覆盖或取消,从而在构建过程中产生不可预知的结果(参见第7章的详细说明)。
(20) 对象不应只是简单地容纳一些数据;它们的行为也应得到良好的定义。
(21) 在现成类的基础上创建新类时,请首先选择"新建"或"创作"。只有自己的设计要求必须继承时,才应考虑这方面的问题。若在本来允许新建的场合使用了继承,则整个设计会变得没有必要地复杂。
(22) 用继承及方法覆盖来表示行为间的差异,而用字段表示状态间的区别。一个非常极端的例子是通过对不同类的继承来表示颜色,这是绝对应该避免的:应直接使用一个"颜色"字段。
(23) 为避免编程时遇到麻烦,请保证在自己类路径指到的任何地方,每个名字都仅对应一个类。否则,编译器可能先找到同名的另一个类,并报告出错消息。若怀疑自己碰到了类路径问题,请试试在类路径的每一个起点,搜索一下同名的.class文件。
(24) 在Java 1.1 AWT中使用事件"适配器"时,特别容易碰到一个陷阱。若覆盖了某个适配器方法,同时拼写方法没有特别讲究,最后的结果就是新添加一个方法,而不是覆盖现成方法。然而,由于这样做是完全合法的,所以不会从编译器或运行期系统获得任何出错提示--只不过代码的工作就变得不正常了。
(25) 用合理的设计方案消除"伪功能"。也就是说,假若只需要创建类的一个对象,就不要提前限制自己使用应用程序,并加上一条"只生成其中一个"注释。请考虑将其封装成一个"独生子"的形式。若在主程序里有大量散乱的代码,用于创建自己的对象,请考虑采纳一种创造性的方案,将些代码封装起来。
(26) 警惕"分析瘫痪"。请记住,无论如何都要提前了解整个项目的状况,再去考察其中的细节。由于把握了全局,可快速认识自己未知的一些因素,防止在考察细节的时候陷入"死逻辑"中。
(27) 警惕"过早优化"。首先让它运行起来,再考虑变得更快--但只有在自己必须这样做、而且经证实在某部分代码中的确存在一个性能瓶颈的时候,才应进行优化。除非用专门的工具分析瓶颈,否则很有可能是在浪费自己的时间。性能提升的隐含代价是自己的代码变得难于理解,而且难于维护。
(28) 请记住,阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序,但注释、细致的解释以及一些示例往往具有不可估量的价值。无论对你自己,还是对后来的人,它们都是相当重要的。如对此仍有怀疑,那么请试想自己试图从联机Java文档里找出有用信息时碰到的挫折,这样或许能将你说服。
(29) 如认为自己已进行了良好的分析、设计或者实施,那么请稍微更换一下思维角度。试试邀请一些外来人士--并不一定是专家,但可以是来自本公司其他部门的人。请他们用完全新鲜的眼光考察你的工作,看看是否能找出你一度熟视无睹的问题。采取这种方式,往往能在最适合修改的阶段找出一些关键性的问题,避免产品发行后再解决问题而造成的金钱及精力方面的损失。
(30) 良好的设计能带来最大的回报。简言之,对于一个特定的问题,通常会花较长的时间才能找到一种最恰当的解决方案。但一旦找到了正确的方法,以后的工作就轻松多了,再也不用经历数小时、数天或者数月的痛苦挣扎。我们的努力工作会带来最大的回报(甚至无可估量)。而且由于自己倾注了大量心血,最终获得一个出色的设计方案,成功的快感也是令人心动的。坚持抵制草草完工的诱惑--那样做往往得不偿失。

㈩ JAVA初学问题!

Java新手入门的30个基本概念
在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念。
Java概述:
目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合pc应用程序的开发,其发展逐渐变成在开发手持设备,互联网信息站,及车载计算机的开发.Java于其他语言所不同的是程序运行时提供了平台的独立性,称许可以在windows,solaris,linux其他操作系统上使用完全相同的代码.Java的语法与C++语法类似,C++/C程序员很容易掌握,而且Java是完全的彻底的面向对象的,其中提出了很好的GC(Garbage Collector)垃圾处理机制,防止内存溢出。
Java的白皮书为我们提出了Java语言的11个关键特性。
(1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。
(2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet。
(3)OO:面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型。
(4)健壮特性:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型。
(5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的比较好。
(6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行。
(7)可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植性很好。
(8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一。
(9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的。
基本概念:
1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一定的属性和行为对象组成的,不同的对象的访问通过函数调用来完成,对象间所有的交流都是通过方法调用,通过对封装对象数据,很大限度上提高复用率。
2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。
3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。
4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由Object根超类扩展而得,根超类下文会做介绍。
5.对象的3个主要特性
behavior---说明这个对象能做什么.
state---当对象施加方法时对象的反映.
identity---与其他相似行为对象的区分标志.
每个对象有唯一的indentity 而这3者之间相互影响.
6.类之间的关系:
use-a :依赖关系
has-a :聚合关系
is-a :继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法.(个性存在于共性中)
7.构造对象使用构造器:构造器的提出,构造器是一种特殊的方法,构造对象并对其初始化。
例:Data类的构造器叫Data
new Data()---构造一个新对象,且初始化当前时间.
Data happyday=new Data()---把一个对象赋值给一个变量happyday,从而使该对象能够多次使用,此处要声明的使变量与对象变量二者是不同的.new返回的值是一个引用。
构造器特点:构造器可以有0个,一个或多个参数
构造器和类有相同的名字
一个类可以有多个构造器
构造器没有返回值
构造器总是和new运算符一起使用.
8.重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载.编译器必须挑选出调用哪个方法。
9.包(package)Java允许把一个或多个类收集在一起成为一组,称作包,以便于组织任务,标准Java库分为许多包.java.lang java.util java,net等,包是分层次的所有的java包都在java和javax包层次内。
10.继承思想:允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段。
11.扩展类:扩展类充分体现了is-a的继承关系. 形式为:class (子类) extends (基类)。
12.多态:在java中,对象变量是多态的.而java中不支持多重继承。
13.动态绑定:调用对象方法的机制。
(1)编译器检查对象声明的类型和方法名。
(2)编译器检查方法调用的参数类型。
(3)静态绑定:若方法类型为priavte static final 编译器会准确知道该调用哪个方法。
(4)当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用x所指向的对象的实际类型相匹配的方法版本。
(5)动态绑定:是很重要的特性,它能使程序变得可扩展而不需要重编译已存代码。
14.final类:为防止他人从你的类上派生新类,此类是不可扩展的。
15.动态调用比静态调用花费的时间要长。
16.抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。
例: public abstract string getDescripition
17.Java中的每一个类都是从Object类扩展而来的。
18.object类中的equal和toString方法。
equal用于测试一个对象是否同另一个对象相等。
toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示.
(toString 方法是一个很重要的方法)
19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。
20.数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小。
21.class类 object类中的getclass方法返回ckass类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。
22.class类为编写可动态操纵java代码的程序提供了强大的功能反射,这项功能为JavaBeans特别有用,使用反射Java能支持VB程序员习惯使用的工具。
能够分析类能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射机制十分强大.
1.在运行时分析类的能力。
2.在运行时探察类的对象。
3.实现通用数组操纵代码。
4.提供方法对象。
而此机制主要针对是工具者而不是应用及程序。
反射机制中的最重要的部分是允许你检查类的结构.用到的API有:
java.lang.reflect.Field 返回字段.
java.reflect.Method 返回方法.
java.lang.reflect.Constructor 返回参数.
方法指针:java没有方法指针,把一个方法的地址传给另一个方法,可以在后面调用它,而接口是更好的解决方案。
23.接口(Interface)说明类该做什么而不指定如何去做,一个类可以实现一个或多个interface。
24.接口不是一个类,而是对符合接口要求的类的一套规范。
若实现一个接口需要2个步骤:
1.声明类需要实现的指定接口。
2.提供接口中的所有方法的定义。
声明一个类实现一个接口需要使用implements 关键字
class actionB implements Comparable 其actionb需要提供CompareTo方法,接口不是类,不能用new实例化一个接口.
25.一个类只有一个超类,但一个类能实现多个接口。Java中的一个重要接口:Cloneable
26.接口和回调.编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发 生时回调对象上的方法。
例:ActionListener 接口监听.
类似的API有:java.swing.JOptionPane
java.swing.Timer
java.awt.Tookit
27.对象clone:clone方法是object一个保护方法,这意味着你的代码不能简单的调用它。
28.内部类:一个内部类的定义是定义在另一个内部的类。
原因是:
1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
2.对于同一个包中的其他类来说,内部类能够隐藏起来。
3.匿名内部类可以很方便的定义回调。
4.使用内部类可以非常方便的编写事件驱动程序。
29.代理类(proxy):
1.指定接口要求所有代码
2.object类定义的所有的方法(toString equals)
30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型。
一、入门
《Java 2从入门到精通》- 推荐
《Thinking in Java》- 强烈推荐*
O’reilly的Java编程基础系列 - 参考*

二、进阶
《Java Cook Book》- 非常推荐* (包含了Java编程的Tips,适合当做手册来查阅)
《O’reilly-Java IO》- 推荐* (包含Java IO编程的各个方面)
《O’reilly-Database Programming with JDBC》- 推荐* (JDBC编程)
《O’reilly-Java Programming with Oracle JDBC》- 参考*

三、Java Web编程
《O’reilly-Java Server Pages》- 强烈推荐*
《O’reilly-Java Servlet Programming》- 非常推荐*
《O’reilly-Jakarta Struts》- 推荐* (Java Web编程的一个MVC实现框架Struts的书)

四、EJB编程
《J2EE应用与BEA Weblogic Server》- 强烈推荐
《Mastering EJB 2.0》- 非常推荐*
《Enterprise Java Bean》- 推荐*

五、Java XML编程
《O’reilly-Java and XML》- 推荐*
《O’reilly-Java and SOAP》- 参考* (Java的SOAP编程)

六、设计模式
《Core J2EE Patterns》- 强烈推荐* (J2EE设计模式,设计企业应用软件必备参考书)
《EJB Design Patterns》- 推荐*

页面功能 【加入收藏】 【推荐给朋友】 【字体:大 中 小】 【关闭】

java编程规范-
作者:佚名 来自:未知
命名规范
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)

Package 的命名
Package 的名字应该都是由一个小写单词组成。
Class 的命名
Class 的名字必须由大写字母开头而其他字母都小写的单词组成
Class 变量的命名
变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。
Static Final 变量的命名
Static Final 变量的名字应该都大写,并且指出完整含义。
参数的命名
参数的名字必须和变量的命名规范一致。
数组的命名
数组应该总是用下面的方式来命名:

byte[] buffer;

而不是:

byte buffer[];

方法的参数
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:

SetCounter(int size){
this.size = size;
}

Java 文件样式
所有的 Java(*.java) 文件都必须遵守如下的样式规则

版权信息
版权信息必须在 java 文件的开头,比如:

/**
* Copyright ? 2000 Shanghai XXX Co. Ltd.
* All right reserved.
*/

其他不需要出现在 javadoc 的信息也可以包含在这里。

Package/Imports
package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。

package hotlava.net.stats;

import java.io.*;
import java.util.Observable;
import hotlava.util.Application;

这里 java.io.* 使用来代替InputStream and OutputStream 的。

Class
接下来的是类的注释,一般是用来解释类的。

/**
* A class representing a set of packet and byte counters
* It is observable to allow it to be watched, but only
* reports changes when the current set is complete
*/

接下来是类定义,包含了在不同的行的 extends 和 implements

public class CounterSet
extends Observable
implements Cloneable

Class Fields
接下来是类的成员变量:

/**
* Packet counters
*/
protected int[] packets;

public 的成员变量必须生成文档(JavaDoc)。Proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。

存取方法
接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。

/**
* Get the counters
* @return an array containing the statistical data. This array has been
* freshly allocated and can be modified by the caller.
*/
public int[] getPackets() { return Array(packets, offset); }
public int[] getBytes() { return Array(bytes, offset); }

public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }

其它的方法不要写在一行上

构造函数
接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。
访问类型 ('public', 'private' 等.) 和 任何 'static', 'final' 或 'synchronized' 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。

public
CounterSet(int size){
this.size = size;
}

克隆方法
如果这个类是可以被克隆的,那么下一步就是 clone 方法:

public
Object clone() {
try {
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}catch(CloneNotSupportedException e) {
throw new InternalError('Unexpected CloneNotSUpportedException: ' + e.getMessage());
}
}

类方法
下面开始写类的方法:

/**
* Set the packet counters
* (such as when restoring from a database)
*/
protected final
void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
throws IllegalArgumentException
{
//
// Ensure the arrays are of equal size
//
if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
throw new IllegalArgumentException('Arrays must be of the same size');
System.array(r1, 0, r3, 0, r1.length);
System.array(r2, 0, r4, 0, r1.length);
}

toString 方法
无论如何,每一个类都应该定义 toString 方法:

public
String toString() {
String retval = 'CounterSet: ';
for (int I = 0; I < data.length(); i++) {
retval += data.bytes.toString();
retval += data.packets.toString();
}
return retval;
}
}

main 方法
如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.

代码编写格式

代码样式
代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)
文档化
必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。
缩进
缩进应该是每行2个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.
如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。
页宽
页宽应该设置为80字符. 源代码一般不会超过这个宽度, 并导致无法完整显示, 但这一设置也可以灵活调整. 在任何情况下, 超长的语句应该在一个逗号或者一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进2个字符.
{} 对
{} 中的语句应该单独作为一行. 例如, 下面的第1行是错误的, 第2行是正确的:

if (i>0) { I ++ }; // 错误, { 和 } 在同一行

if (i>0) {
I ++
}; // 正确, { 单独作为一行

} 语句永远单独作为一行.

如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置。

括号
左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:

CallProc( Aparameter ); // 错误
CallProc(Aparameter); // 正确

不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:

if ((I) = 42) { // 错误 - 括号毫无意义
if (I == 42) or (J == 42) then // 正确 - 的确需要括号

程序编写规范

exit()
exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。
异常
申明的错误应该抛出一个RuntimeException或者派生的异常。
顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。
垃圾收集
JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么写:


{
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, 'IDE Project File');
}


除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:

FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, 'IDE Project File');
fos.close();

Clone
下面是一种有用的方法:

implements Cloneable

public
Object clone()
{
try {
ThisClass obj = (ThisClass)super.clone();
obj.field1 = (int[])field1.clone();
obj.field2 = field2;
return obj;
} catch(CloneNotSupportedException e) {
throw new InternalError('Unexpected CloneNotSUpportedException: ' + e.getMessage());
}
}

final 类
绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求)
如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承她。
访问类的成员变量
大部分的类成员变量应该定义为 protected 的来防止继承类使用他们。
注意,要用'int[] packets',而不是'int packets[]',后一种永远也不要用。

public void setPackets(int[] packets) { this.packets = packets; }

CounterSet(int size)
{
this.size = size;
}

编程技巧

byte 数组转换到 characters
为了将 byte 数组转换到 characters,你可以这么做:

'Hello world!'.getBytes();

Utility 类
Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。

初始化
下面的代码是一种很好的初始化数组的方法:

objectArguments = new Object[] { arguments };

枚举类型
JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:

class Colour {
public static final Colour BLACK = new Colour(0, 0, 0);
public static final Colour RED = new Colour(0xFF, 0, 0);
public static final Colour GREEN = new Colour(0, 0xFF, 0);
public static final Colour BLUE = new Colour(0, 0, 0xFF);
public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}

这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。 他们可以用 == 操作符来比较。
但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK

new Colour(0,0,0)

那么这就是另外一个对象,==操作符就会产生错误。她的 equal() 方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。

Swing

避免使用 AWT 组件
混合使用 AWT 和 Swing 组件
如果要将 AWT 组件和 Swing 组件混合起来使用的话,请小心使用。实际上,尽量不要将他们混合起来使用。

滚动的 AWT 组件
AWT 组件绝对不要用 JscrollPane 类来实现滚动。滚动 AWT 组件的时候一定要用 AWT ScrollPane 组件来实现。

避免在 InternalFrame 组件中使用 AWT 组件
尽量不要这么做,要不然会出现不可预料的后果。

Z-Order 问题
AWT 组件总是显示在 Swing 组件之上。当使用包含 AWT 组件的 POP-UP 菜单的时候要小心,尽量不要这样使用。

调试

调试在软件开发中是一个很重要的部分,存在软件生命周期的各个部分中。调试能够用配置开、关是最基本的。

很常用的一种调试方法就是用一个 PrintStream 类成员,在没有定义调试流的时候就为 null,类要定义一个 debug 方法来设置调试用的流。

性能

在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。

不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。
不必要的对象构造
不要在循环中构造和释放对象

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:639
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:368
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:84
php微信接口教程 发布:2025-04-16 17:07:30 浏览:310
android实现阴影 发布:2025-04-16 16:50:08 浏览:793
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:344
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:212
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:812
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:366
土压缩的本质 发布:2025-04-16 16:13:21 浏览:592