![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《疯狂java》
文章平均质量分 72
方方
软件工程专业
展开
-
多线程陷阱(不要调用run方法;静态的同步方法)
1. 从JDK1.5开始,Java提供了3种方式来创建,启动多线程:Ø 继承Thread类来创建线程类,重写run()方法作为线程执行体。Ø 实现Runnable接口来创建线程类,重写run()方法作为线程执行体。Ø 实现Callable接口来创建线程类,重写run()方法作为线程执行体。其中第一种方式效果最差,它有2点坏处:l 线程类继承了Thread类,无法在继承其他父类。l 因为每原创 2011-10-23 21:18:45 · 8646 阅读 · 2 评论 -
构造器陷阱(序列化恢复Java对象,clone复制Java对象,无限递归的构造器)
1.1 构造器的陷阱1.构造器不能声明返回值类型,也不能使用void声明构造器没有返回值。当为构造器声明添加任何返回值类型声明,或者添加void声明该构造器没有返回值时,编译器并不会提示这个构造器有错误,只是系统会把这个所谓的“构造器”当成普通方法处理。这个时候初始化类实例时系统会调用默认的无参数的构造器。2.构造器创建对象吗?大部分java书籍都笼统的说:通过构造器来创建一个java对象。这样原创 2011-10-23 18:30:33 · 2641 阅读 · 1 评论 -
流程控制陷阱(Switch语句,标签,if语句,for循环,foreach循环的循环计数器)
1. 流程控制的陷阱1.1 Switch语句陷阱 Switch语句后可以指定一个表达式,系统根据表达式的值来决定执行哪个case分支的执行体。对于switch语句的表达式而言,只能是如下5种数据类型。 byte(字节整型),short(短整型),int(整型),char(字符型),enum(JDK1.5之后可以使用枚举型)。 绝不能是String类型,也不能是long,flo原创 2011-10-23 16:56:57 · 2180 阅读 · 3 评论 -
表达式陷阱(字符串,表达式类型,输入法,注释字符,转义字符,正则表达式)
1. 表达式中的陷阱1.1 关于字符串的陷阱1. 在创建一个String s = new String("java");的时候,JVM会到常量池中去检查看是否有一个"java"对象了,如果没有则在常量池中创建一个。之后会在堆内存中分配了一个空间,放置这个new出来的String对象,形式如下:java.lang.String@123b, 常量池是在编译期生成的,而new一个对象是在运行时进原创 2011-10-23 16:21:49 · 2375 阅读 · 2 评论 -
java异常捕捉陷阱(内存泄漏,finally块,catch块,继承得到的异常)
1. 异常捕捉的陷阱 异常处理机制是java语言的特色之一,尤其是java语言的Checked异常,更是体现了java语言的严谨性:没有完善错误处理的代码根本不会被执行。对于Checked异常,java程序要么声明抛出,要么使用try……catch进行捕获。1.1 正确关闭资源的方式 在实际开发中,经常需要在程序中打开一些物理资源,如数据库连接,网络连接,磁盘文件等,打开这些物原创 2011-10-22 18:12:28 · 6827 阅读 · 3 评论 -
多线程陷阱(所有静态初始化块中的代码不一定是类初始化操作)
大家先看一个程序:public class StaticThreadInit { static { Thread t = new Thread() { public void run() { System.out.println("进入run方法"); System.out.println("1------" + website); website = "w原创 2011-10-23 21:47:47 · 4429 阅读 · 3 评论 -
排序算法一(直接选择,堆排序,冒泡排序和快速排序)
对于一个排序算法来说,一般从如下3个方面衡量算法的优劣:1.时间复杂度:它主要是分析关键字的比较次数和记录的移动次数2.空间复杂度:分析排序算法中需要多少辅助内存3.稳定性:若两个记录A和B的关键字相等,排序前后二者的先后次序没有发生变化就称之为稳定排序现有的排序算法分为:内部排序和外部排序内部排序:所有的操作都是在内存中完成的,而外部排序需要借助外部存储器(如磁盘等)外部原创 2011-10-26 21:12:42 · 1991 阅读 · 1 评论