java的小知识点

1,java.lang.NumberFormatException

把一个"null"的字符串转换为INTEGER 当然会出错(之所以出的不是空指针是因为你这个NULL是个字符串。

2.简单判断一个字符串里面含有中文

s1.length()==s1.getBytes().length

3,

可以对字符进行循环

for(char i='A';i<='Z';i++){%>

4,

得到当前的天数,比如今天3号,得到的就是3

Calendar c=Calendar.getInstance();

        int day=c.get(Calendar.DAY_OF_MONTH);

5,

String的contains方法是区分大小写的

6,

比较两个String型的日期大小

if(createtime.trim().compareTo("2010-01-01 00:00:00")<0){

7,

Try语句中有return,那么finally中的code会执行吗?在return前还是后面

不一定

return之前没有System.exit();之类的直接让应用停下来的代码的话, finally中的代码就会执行 并且是在return之前执行

8,

计算两个日期类型相减的结果

Date date=msg.getCreatetime();

       long diff=new Date().getTime()-date.getTime();

       longhours=diff/(1000*60*60);   得到的是以小时为单位的

9,

使用DB7.class.getClassLoader().getResource("").getPath();

如果在eclipse里面,默认是到工程的bin路径为止

如果离开了eclipse里面,默认的路径到工程的路径为止

10,


11,

This和super的本质区别

http://topic.csdn.net/u/20101116/00/c656ee28-f849-4b32-a8f8-1171409e232f.html

其实都犯了一个错误,其实楼主给出的英文里的说明已经非常明确地说明了,this是一个对象的引用,而super仅仅是一个指示编译器调用超类方法的特有的关键字,这里一定要记住!super不是一个引用,只是一个关键字!

super表现为指向作为父类的一个实例的当前对象的一个引用。所以super只是作为参考的引用,但不是引用

12, StringBuilder 详解

StringBuilder的Capacity属性的取值范围是:0~MaxCapacity;默认大小为:16。

Append等扩充字符串操作时,如果结果字符串的长度大于Capacity,则Capacity加倍;如

果加倍后的Capacity还不足以容纳结果字符串,则Capacity的值等于结果字符串的长度。

实现原理:StringBuilder维护一个长度等于Capacity(容量)的字符串(可以看作字符数组),当Capacity长度的字符串不足以容纳结果字符串时,StringBuilder开辟新的长度为经过上面的规则计算好的Capacity的内存区域,将原字符串复制到新的内存区域再进行操作,原字符串区域交给GC回收。因此这里也涉及到内存的分配与回收,使用StringBuilder时最好估算一下所需容量,用这个容量初始化Capacity,提高性能。

13, 以下是 Java 判断字符串是否为空的几种方法

方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.     "".equals("") 156毫秒

方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法.  "".length()<=015毫秒

方法三: Java SE 6.0才开始提供的办法,效率和方法二基本上相等,但出于兼容性考虑,推荐使用方法二或方法四"".isEmpty() 15毫秒

方法四:这是种最直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多 if(""=="")16毫秒

14,选择错误的类加载器

错误的代码: 

Java代码  

1.            Class clazz = Class.forName(name);  

2.            Class clazz = getClass().getClassLoader().loadClass(name);  


这里本意是希望用当前类来加载希望的对象, 但是这里的getClass()可能抛出异常, 特别在一些受管理的环境中, 比如应用服务器, web容器, Java WebStart环境中, 最好的做法是使用当前应用上下文的类加载器来加载. 
 正确的写法: 

Java代码  

1.            ClassLoader cl = Thread.currentThread().getContextClassLoader();  

2.            if (cl == null) cl = MyClass.class.getClassLoader(); // fallback  

3.            Class clazz = cl.loadClass(name);  

15,反射使用不当 

错误的写法: 

Java代码  

1.            Class beanClass = ...  

2.            if (beanClass.newInstance() instanceof TestBean) ...  


这里的本意是检查beanClass是否是TestBean或是其子类, 但是创建一个类实例可能没那么简单, 首先实例化一个对象会带来一定的消耗, 另外有可能类没有定义默认构造函数. 正确的做法是用Class.isAssignableFrom(Class) 方法. 
 正确的写法: 

Java代码  

1.            Class beanClass = ...  

if (TestBean.class.isAssignableFrom(beanClass)) .

16,stringbuffer没有实现equals方法,所以两个内容相同的sb的equals比较为false所以将sb存入集合中有问题,

17,普通类只有public和默认的修饰符,而与方法平级的内部类有public protect friended private四种修饰符,在方法里面的内部类不能加任何的访问修饰符

18,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实         例对象会在多线程环境下使用,那么最好用StringBuffer

19,在try和finally中,try中的return和break比finally块要早执行

20,如果说两个线程都对自己的代码块进行同步,不过它们的同步锁不一样。按照正常情况来说这两个块是可以同时执行的,但是如果两个同步块都调用了同一个方法或其他           共享数据,那么只能够只有一个同步块执行,另一个同步块进行等待

21,如下会打印几?能否详述原因?

public class Test {
 public static void fun(String a){
  System.out.println(1);
 }
 public static void fun(Object a){
  System.out.println(2);
 }
 
 public static void main(String[] args) {
  fun(null);
 }
}

会调用String那个参数的函数
null 可以赋值给Object  和 String
但是编译器会预先赋值给子类 即String
如果你再加一个Integer为参数的函数
编译器就会报错 因为编译器不知道赋值给Integer 还是String好
null 是一个模棱两可的类型
关于重载函数 其实都是编译器的功能
编译器在编译期间会把命名重复 参数不同的函数 重新起名
所以在字节码中不存在重载函数
只有在不能转换为其它类型的时候,才会取Object,因为Object是所有的父类,优先级是最低的,这个是最后才会用到的。

22,

JAVA日期格式输出月份前面不想被自动补0

那可以把MM写成M,dd写成d,HH写成H即可

23、

SuppressWarnings压制警告,即去除警告 
rawtypes是说传参时也要传递带泛型的参数

24、BitSet的应用

默认值为false,设置为true表示编入索引,且size没有限制

public class Test {
	public static void main(String[] args) {
		BitSet bitSet = new BitSet();
		bitSet.set(20);
		System.out.println(bitSet.length());//21
		for(int i=0; i<50; i++){//打印0-49的信息,只有当i为20的时候为true
			System.out.println(i+"#"+bitSet.get(i));
		}
	}
}
25、

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

26、一个类序列化后通过网络传输后反序列化必须要包名一样才行

27、远程传输的类必须要实现Serializable接口进行序列号,否则会报错

27、

java中NaN是什么意思

NaN,是Not a Number的缩写。
  NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。由上面的表中可以看出,对于单精度浮点数,NaN 表示为指数为 emax + 1 = 128(指数域全为 1),且尾数域不等于零的浮点数。IEEE 标准没有要求具体的尾数域,所以 NaN 实际上不是一个,而是一族。不同的实现可以自由选择尾数域的值来表达 NaN,比如 Java 中的常量 Float.NaN 的浮点数可能表达为 01111111110000000000000000000000,其中尾数域的第一位为 1,其余均为 0(不计隐藏的一位),但这取决系统的硬件架构。Java 中甚至允许程序员自己构造具有特定位模式的 NaN 值(通过 Float.intBitsToFloat() 方法)。比如,程序员可以利用这种定制的 NaN 值中的特定位模式来表达某些诊断信息。
可用该方法进行判断

public static boolean isNaN(double v)

如果指定的数是一个 NaN 值,则返回 true;否则返回 false


28、

InputStream是一个抽象类,并且他实现了Closeable接口,源码如下:public abstract class InputStream implements Closeable{}

OutputStream也是一个抽象类,实现了Closeable和Flushable接口,源码如下:public abstract class OutputStream implements Closeable, Flushable{}
Reader也是一个抽象类,实现了Closeable和Readable接口,源码如下:public abstract class Reader implements Readable, Closeable{}
Writer同样也是一个抽象类,实现了Appendable Closeable和Flushable接口,源码如下:public abstract class Writer implements Appendable, Closeable, Flushable{}

可以很明显的看到上面都实现了Closeable接口,这儿接口主要作用是:Closeable是一种可以被关闭的,指向源地址或目的地址的数据。简单说,Closeable也是一种数据,只是这种数据可以被关闭,所有实现了这个接口的类,他们的数据流都可以被人为的关闭。这个接口有唯一一个方法:public void close() throws IOException。这个方法一旦被调用,将会关闭相应的输入输出流,并且会释放掉所有给这个流有关的系统资源。如果这个流已经关闭,则本次关闭,将不起作用。

由上面可知,所有继承于InputStream、OutputStream、Reader和Writer的类都具有一个close方法,用来人为的关闭对应的流,并且释放掉他们所占用的系统资源。

29、

java.util
接口 EventListener

所有事件侦听器接口必须扩展的标记接口。 

30、

System.getProperty("java.io.tmpdir")

C:\Users\ADMINI~1\AppData\Local\Temp\




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值