- 浏览: 2467081 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
国人写的, 感觉是一个Java编程注意事项的汇编(涉及到JDK5以后的特性比较少), 适合Java入门不久, 对一些细节了解不深入的人看, 当然老鸟也可以翻翻用来查缺补漏, 巩固所学所用. 如果高阶的可以看看<effictive java>
===============我是读书笔记的分割线===================
如果操作数是byte, char或者short类型(或者为三者的混合运算)时, 结果为int
负号"-"也是一个运算符, 因此假设存在一操作数x,x可以是byte, char, short, 那么-x就不再是以前的x类型, 而是int
对于编译时的整数常量, 如果将其赋值给比int类型低的类型(byte, short, char), 而此常量的值又没有超过该变量类型的取值范围, 那么编译器就可以做隐式类型转换(比如: short s = 20), 但是这里仅限于整型常量赋值, 而对于方法调用并不适用.
比如:
private void invoke(){call(5);}
private void call(byte b){...}
private void call(long l){...}
这里常数5既可以转换为long类型, 也可以转换byte, 两种转换都可以隐式进行, 这样系统将无法选择.
在表达式中, 几个操作数都是int类型的常量, 而若干个int类型的计算结果即使超出了其所有能表示的数值范围, 也不会自动进行向更高的数据类型转化(如自动转换为long), 即结果仍然为int类型, 最终导致溢出. 如long l=70*60*24*365; 的结果为-1718527296, 正确的写法: long l = 70L*60*24*365
在使用浮点数时, 不要在数量级相差非常大的数之间进行加减运算, 最好的做法是不使用浮点数进行计算.
进行移位运算, 左操作数是int类型时, 右侧的操作数只有低于5位是有效的(低于5位的十进制最大值为31), 因为int类型只有32位, 这样就可以避免将数据全部移除而失去意义. 同样对于左侧操作数为long类型的移位运算, 右侧最大数必须低于6位.如:
27<<40
首先取40的补码(低5位):
101000
取低5位:
01000
这就是十进制的8, 因此相当于:
27<<8
在异或运算中, 对于两个变量x,y, 有这样一个性质:x^y^y=x, 利用异或这个性质可以进行简单的加密功能.
由于局部变量是在栈上分配的, 而类的实例变量是在堆上分配的, 而对局部变量的访问速度要快于对于堆中变量的访问, 因此当在循环中多次访问某个实例变量时, 可以先将实例变量赋值给一局部变量, 然后对局部变量进行访问.
子类可以继承父类的成员, 但是却不能继承父类的构造函数, 当子类被实例化时, 在子类构造函数中会自动地调用父类的构造函数, 如果不显示地调用, 系统会自动调用父类无参的构造函数. 在子类构造函数中, super语句必须是第一条语句, 因为构造器是用来对类的成员进行初始化, 而子类的某些成员可能要依赖父类的成员来初始化, 如果父类的初始化不能正常进行, 就没法保证子类能够正确的初始化. 如:
class Ball{public Ball(int radius){...}}
class Football extends Ball{}
这里编译无法通过, 因为子类Football没有声明构造函数, 则系统会自动创建一个默认构造器, 而该构造器会自动调用父类无参构造器
public Football(){super();}
而父类中根本没有无参构造函数, 所以出错.
如果只是声明了类的引用, JVM是不会载入类的. JVM只有在需要某个类时才载入该类, 这种需要可以是使用该类的静态成员变量, 调用该类的静态方法, 或者生成了该类的实例, 同时如果加载了子类, 父类也会加载.
如果有可能尽量不要使用成员变量而使用局部变量, 因为成员变量要等对象销毁时才会随之销毁, 如果有可能使用参数传递共享数据, 这样有利于垃圾的清理, 使内存空间能及时释放.
垃圾收集只会回收对象所占的内存, 也就是使用new在堆上创建的对象, 而对于本地方法来说, 方法的实现方式是平台相关的, 其内部并非使用java代码, 而是类似于c等其他语言, 如果在本地方法内申请并占用某些资源, 那么垃圾收集器将无可奈何. 例如在程序中操作文件, 如果要显示的回收这种资源, 需要调用IO类的close方法来清理本地方法占用的资源.
对于基本类型的包装类来说, 其对象是不可变, 对于某些频繁使用的值, 系统提供了包装类的缓冲(即预先创建了经常使用的包装类对象, 可以参考包装类的valueOf方法), 其值包括:
boolean的true和false
byte的-128~127
char的0~127
short的-128~127
int的-128~127
long的-128~127
对于float和double的包装类没有缓存
对于instanceof操作符来说, 如果左侧是null, 那么不管右侧是什么类型, 一律返回false, 因为null不是任何类型的对象.
因为数组类型也是类型, instanceof右侧的操作数类型也可以数组类型. 如:
Type[] type = new Type[3];
type instanceof Type[]
重载方法的调用是在编译时确定的, 与引用所指向的具体对象类型无关, 即重载方法关心的是引用的具体类型, 而不是对象的具体类型.如:
print(Cat cat){print("cat");} print(Dog dog){print("dog");} print(Animal animal){print("animal");} void main(){ Cat cat = new Cat(); print(cat); Dog dog = new Dog(); print(dog); Animal animal = cat; print(animal); // 输出是"animal", 而不是cat }
如果子类重写了父类的方法, 则通过父类的引用调用的是子类的方法. 如果子类隐藏了父类的方法(静态方法的覆盖), 则通过父类的引用调用的仍然是父类的方法. 实例方法的调用是动态绑定的, 运行时根据对象真正的类型来决定调用哪个方法, 而静态方法的调用是静态绑定的, 是根据引用的类型来决定调用哪个方法.
子类不能重写父类中的成员变量, 只能隐藏父类中的成员变量(不论是静态的还是实例的)
接口中的成员变量默认是public static final, 即接口的所有成员都是public.
由于匿名类没有名字, 所以匿名类无法声明构造器, 如果需要对匿名类的成员进行初始化, 可以使用初始化块的方式.如:
interface Center{} class Circle{public Center getCenter(int x, int y){return new Center(){ int int i; int j; { i = x; j =y; } } } }
要区分包装类的Class对象与其对应的基本类型的Class独享, 二者并不相等:
Integer.TYPE == int.class
Integer.class != Integer.TYPE
循环的优化: 次数少的放外层, 多的放内层
int v1 = 10000; int v2 = 1000; int v3 = 10; for(int i = 0; i < v3; i++){ for(int j = 0; j < v2; j++){ for(int k = 0; k < v3; k ++){ ... } } }
发表评论
-
<异类>读书笔记
2013-03-06 07:54 0成功者能够获得更多的机会,从而能变得更为成功。税收愈减免,富人 ... -
《python学习手册》学习笔记
2013-03-11 22:25 3465python格式化传参数非常赞,用数字标明位置,值得java学 ... -
<万历十五年>读书笔记
2013-03-11 22:27 1583在网上下了一个电子书, 但是貌似跟万历十五年没啥关系, 都是讨 ... -
《鸟哥的linux私房菜》读书笔记(部分)
2013-03-11 22:27 2062x86是一种微机系统硬件架构,另一种是苹果的mac的架构 l ... -
《你的灯亮了吗》读书笔记
2013-03-06 07:20 1503这是一本原本写给程序员的书 本书的四个问题: 搞清问题的来源 ... -
《小狗钱钱》读书笔记
2013-03-06 07:17 1476一本非常不错的理财学习入门书, 以童话的形式, 儿童的思维方式 ... -
《我的奋斗》读书笔记
2012-04-14 22:03 2053文字写的很幽默, 故事也基本都是一些平常人的故事,看到了一个特 ... -
使用Externalization更高效的实现java对象序列化
2012-04-04 22:38 3144Externalization没用过, 它通过牺牲默认序列化的 ... -
关于java的检查异常和非检查异常
2012-04-04 21:31 4952这里有一个关于java的检查异常和非检查异常的观点, 我比较赞 ... -
使用ThreadLocal保证DateFormat线程安全
2012-04-03 06:45 3596大家都知道DateFormat是线程非安全的, 一般在多线程环 ... -
使用枚举实现一个状态机
2012-04-02 23:14 3934非常巧妙的一个使用枚举的例子.原文见这里 interface ... -
一个同步队列例子
2012-04-02 21:35 1564这个用的也比较少, 做一个参考, 原文见这里 private ... -
一个读写锁的例子
2012-04-02 21:20 1528用的比较少, 做一个参考. 原文在这里 public clas ... -
如何计算一个合适的线程池大小参数
2012-04-02 20:57 9067原文在这里 下面是一个计算的框架代码: /** * A ... -
正确使用日志的10个技巧
2012-02-11 21:13 28848做一个苦逼的Java攻城师, 我们除了关心系统的架构这种hig ... -
Java编程最差实践
2012-02-04 17:54 26622原文地址:http://www.odi.ch/prog/des ... -
利用jOOR简化Java 反射使用
2012-01-15 20:39 5153原文:http://lukaseder.wordpress.c ... -
《Java Performance》书评
2012-01-15 18:32 2960原文: http://java.dzone.com/rev ... -
《程序员应该知道的97件事》读书笔记
2012-01-15 18:36 2382一本关于写代码的文 ... -
《影响力》读书笔记
2011-11-05 14:47 1833从书名上很可能以为 ...
相关推荐
韩顺平2011细说servlet完整笔记
J2EE(Java 2 Platform, Enterprise Edition)是Java平台上针对企业级应用的一套标准,包含了13种技术,包括Servlet、JSP、EJB等。其中,Servlet是用于接收和响应HTTP请求的服务器端组件,而JSP则负责动态生成HTML...
韩顺平老师的“2011细说Servlet笔记”是针对这一主题的深入讲解,旨在提供全面且实用的学习资料。在本篇中,我们将深入探讨Servlet的相关知识点,包括其原理、配置、生命周期以及与HTTP协议的交互。 1. **Servlet...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代标准I/O(BIO)模型的新选择。NIO在Java 1.4版本引入,它为Java应用提供了高效、低延迟的数据处理方式,特别适合于高...
Servlet是Java EE(现在称为Java Platform, Enterprise Edition或 Jakarta EE)技术栈中的核心组件,主要用于构建Web应用程序。本文将深入探讨Servlet的相关知识点,包括它的背景、功能、在Java EE体系中的位置以及...
从今天开始,学一课我做一个笔记,就当是督促吧! HTML基础 HTML是HyperText Mqrkup Language的缩写 •文件的后缀名一般为".html"或者".htm"; •所谓的超文本(HyperText)就是可以在文件中标识图片、链接、表格、...
### 细说Java线程问题:深入理解与实践 在Java编程中,线程是执行的基本单位,它允许程序在操作系统层面并发执行多个任务。掌握Java线程的原理及其使用方法,对于提升软件性能和响应性至关重要。本文将从线程的概念...
Java中的`util`类是Java开发中不可或缺的一部分,它们提供了许多数据结构和工具类的实现,使得开发者可以方便地处理各种数据。`java.util`包是Java标准库的核心部分,包含了许多用于处理集合、时间日期、随机数生成...
### 细说Java之常用集合类 #### 一、引言 在Java开发过程中,我们经常需要处理数据的集合操作,比如存储、检索、排序等。为了方便开发者使用,Java SDK提供了一系列内置的集合类,它们主要位于`java.util`包中。...
最后,关于学习资源,"细说Java之常用集合类.pdf"这本书籍教程应该详细介绍了这些集合类的用法和实现细节,可以帮助开发者更好地理解和运用Java集合框架。"下载说明.txt"可能包含获取更多资源的指南,如"A5下载- 更...
细说servlet ppt和笔记”指的是由知名IT讲师韩顺平在2011年推出的J2EE教学资源,主要聚焦于Servlet技术的讲解。Servlet是Java Web开发中的核心组件,用于处理HTTP请求,提供动态网页服务。 【描述】:描述中的...
### 韩顺平2011细说Servlet笔记2:MVC模式修改用户管理系统 #### 1. 当前网站结构的问题分析 - **代码重复**:`LoginCl.java`和`ManageUser.java`文件中都有操作数据库的逻辑,导致代码重复。 - **层次混乱**:...
这份“细说Linux—Shell笔记”显然是一个关于Linux Shell的详细教程,包括了对各种Shell命令的分章节讲解。 在学习Linux Shell时,首先要理解Shell的种类,常见的有Bash(Bourne Again SHell)、Sh、Csh、Ksh等。...
传智播客韩顺平细说Servlet课件笔记
传智播客韩顺平细说Servlet课件笔记2