- 浏览: 10941 次
- 性别:
- 来自: 杭州
-
最新评论
文章列表
内部类分为成员内部类、局部内部类、匿名内部类、静态嵌套类。
成员内部类
成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
对于普通的类,可用的修饰符有final、abstract、strictfp、public和默认的包访问。
但是成员内部类更像一个成员变量和方法。
可用的修饰符有:final、abstract、public、private、protected和static。
一旦用static修饰内部类,它就变成静态内部类了。
局部内部类
...
关于Java中的final
- 博客分类:
- 编程相关
Java中的final共有三种用法:final成员变量
当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再 ...
对于类的扩展,在面向对象的编程过程中,我们首先想到的是类的继承,由子类继承父类,从而完成了对子类功能的扩展。但是,面向对象的原则告诉我们,对类的功能的扩展要多用组合,而少用继承。其中的原因有以下几点:
第一、子类对父类的继承是全部的公有和受保护的继承,这使得子类可能继承了对子类无用甚至有害的父类的方法。换句话说,子类只希望继承父类的一部分方法,怎么办?
第二、实际的对象千变万化,如果每一类的对象都有他们自己的类,尽管这些类都继承了他们的父类,但有些时候还是会造成类的无限膨胀。
第三、继承的子类,实际上需要编译期确定下来,这满足不了需要在运行内才能确定对象的情况。而组合却可以比继 ...
Java中finalize()
- 博客分类:
- 编程相关
垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以
写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能(这
里面涉及到很多东西,比如对象空间树等内容)。
不过用Java以外的代码编写的Class(比如JNI,C++的new方法分配的内存),垃圾回收器并不能对这些部分进行正确的回收,这时就需要我们覆盖默认的方法来实现对这部分内存的正确释放和回收(比如C++需要delete)。
总之,finalize相当于析构函数,他是垃圾回收器回收一个对象的时候第一个要调用的方 ...
数据类型
大小
范围
默认值
byte(字节)
8
-128 - 127
0
shot(短整型)
16
-32768 - 32768
0
int(整型)
32
-2147483648-2147483648
0
long(长整型)
64
-9233372036854477808-9233372036854477808
0
float(浮点型)
32
-3.40292347E+38-3.40292347E+38
0.0f
double(双精度)
64
-1.79769313486231570E+308-1.7976931 ...
一般Java在内存分配时会涉及到以下区域:
◆寄存器:我们在程序中无法控制
◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
◆堆:存放用new产生的数据
◆静态域:存放在对象中用static定义的静态成员
◆常量池:存放常量
◆非RAM存储:硬盘等永久存储空间
实现clone要有两个条件:
1. 覆盖clone()方法
2. 实现Cloneable接口
例子
package test;
public class User implements Cloneable{
public int i = 1;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
单元测试也写了不少,使用得最多的还是junit。
看到有人用easymock,jmockit等工具,但是我还是只用junit。
为什么这么固执呢。
我认为easymock,jmockit等工具是对不良代码进行单元测试时,不得不用的工具。
假如代码本身写得优雅,根本就不用这些辅助性的工具,junit足矣。
我崇尚简单,能不引入其他,就不引入。估计也是受其影响吧。
System.arraycopy简介
- 博客分类:
- 编程相关
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
src-源数组
srcPos-源数组开始位置
dest-目标数组
destPos-目标数组开始位置
length-拷贝长度
Java中toArray有两个方法。
public Object[] toArray()
public <T> T[] toArray(T[] a)
两个问题:
1. 有什么区别?
2. 怎么使用?
区别是前者会产生ClassCastException,后者不会。为什么呢?
来看一下源代码。
public Object[] toArray() {
return Arrays.copyOf(elementData, size);
}
public <T> T[] toArray(T[] a) ...
从if/else到抽象
- 博客分类:
- 编程相关
if/else多,让人看得心烦。if/else层次深,让人看得头痛。
怎样才能让代码优雅呢?
介绍一种方法。步骤如下:
1. 将if/else区块中逻辑抽象成接口。
2. 将各个if/else分支中的逻辑打散到实现类中。
3. 使用工厂模式,将不同的条件路由到实现类中。
假如有如下代码:
if (cond == 1) {
do business 1
}
...
if (cond == 2) {
do business 2
}
实现过程
1. 提炼接口
public class Business {
void d ...
刚在网上查了查“代码保护”,说的是公司代码,怕被员工偷走的事情。
我这里说的“代码保护”,说的不是这回事。说的是我在做项目过程中,经常写的如下的代码。
if (list != null && !list.isEmpty()) {
...
}
if (s != null && !s.equals("")) {
...
}
在你的代码中,可以想象很多也都是这样的代码。
从系统的稳定性来说,这些代码不可或缺。但是为了稳定性,写业务之前,是否定要这么一段。我想说 ...