`
zhangfy068
  • 浏览: 148462 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java解惑笔记

    博客分类:
  • java
 
阅读更多

 

一、表达式谜题

 

 

1、x=x+i并不一定等于x+=i;

 

 

  short x=0;	int i=123456;
	x=x+i; //编译出错
	x+=i; //编译通过

 

 因为i超过了short最大长度

结论:char ,short 最好不用+=这种运算符 ,还是不能偷懒啊。。对于转型的不要用+=避免出错

 

2、system.out.println(2.00-1.10)

答案0.8999999999999

结论:关于小数运算还是使用BigDecimal进行加减乘除吧。。

 

3、长整除问题

 

 

		final long MICROS_PER_DAY=24*60*60*1000*1000;
		final long MILLS_PER_DAY=24*60*60*1000;
		long a=MICROS_PER_DAY/MILLS_PER_DAY;
		System.out.println(a);

 

 这个结果居然是5..

结论:遇到大数字的,防止转Int溢出

改为

 

final long MICROS_PER_DAY=24L*60*60*1000*1000;
final long MILLS_PER_DAY=24L*60*60*1000;

 不确定是不是会溢出的问题,还是以后加个L吧。。

 

4、条件操作符

 

char x='a';
		int i=0;
		System.out.println(true ?x:0);
		System.out.println(false?i:x);
 

输出结果是: 

a

97

输出了Assll码

总结:条件后面不会一个类型的,还是别用条件操作符啦。。

 

5、byte序列转换成String的时候

如果不指定默认的字符集,将采取默认的系统字符集。

 

 

		byte bytes[]=new byte[256];
		for(int i=0;i<256;i++){
			bytes[i]=(byte)i;
		}
		String str=new String (bytes,"iso-8859-1");
		for(int i=0,n=str.length();i<n;i++){
			System.out.println((int)str.charAt(i));
		}
	}

 总结:要是碰到byte转换成字符串的时候还是指定字符集吧。。

 

6、Random

random.nextInt(2)  取到的是0,1  不是 出现2.

 

7、j=j++;

 

int tmp=j;
j=j+1;
j=tmp;

 

 这就崩溃了,答案是j=0;

 

总结:不要在单个表达式中对一个变量赋值超过一次。

 

8、谜题26,在循环中

 

public class InTheloop {
	public static final int END=Integer.MAX_VALUE;
	public static final int START=END-100;
	public static void main(String[] args) {
		int count=0;
		for(int i=START;i<=END;i++){
			count++;
		}
		System.out.println(count);
	}
}

 

 陷入无限循环中,不会打印100,或者101。。

因为对于所有的int类型都会<=MAX_VALUE恒成立。

改为for(long i=START....)

总结:涉及到边界值还是需要注意的。

 

9、谜题28

 

public class Looper {
	
		public static void main(String[] args) {
//			double i=1.0/0;
			double i=Double.POSITIVE_INFINITY;
			System.out.println(i);
			while(i==i+1)
			{
//				System.out.println(1);
			}
			
		}
}

 可以无限循环。。

 

 

10、 // TODO Auto-generated method stub final int START=2000000000;

		int count=0;
		for(float f=START;f<START+50;f++)//不要在循环中使用float
			count++;
		System.out.println(count);
	}

 11、finally 的注意

最好不要存在二个return 因为最终都会只返回false

 

try{
return true;
}finally{
return false
}
 

 

 

12、在一个类中,声明中创建该实例会造成死循环

 

//stackOverError
public class Reluctant {

	/**
	 * @param args
	 */
	private Reluctant internalInstance=new Reluctant();
	public Reluctant()  throws Exception{
//		throw new Exception("i'm not coming out ");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			Reluctant b=new Reluctant();
			System.out.println("surprise");
		}catch(Exception ex){
			System.out.println("i told you so");
		}
	}

}
 

 

 

13、finally中抛出的异常

finally{

in.close();

out.close();

}

如果in.close()的时候抛出了异常,那么out.close()就不会继续运行了。。。。

所以可以采用

 

 

finally{
try{
in.close();
}catch{
//do nothing
}

try{
out.close();
}catch{
//do nothing
}
}
 

 

在finally中捕获异常。。。

 

使用closeable接口进行重构,使代码更加整洁。

 

import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


/**
 * @author ZhangFuYU
 * @version 创建时间: 2012-10-15 上午11:07:24
 * 类说明:
 */

public class FinallyTest {
	static void copy(String src,String dest) throws IOException{
		InputStream in=null;
		OutputStream out=null;
		try{
			in=new FileInputStream(src);
			out=new FileOutputStream(dest);
			byte[] buf=new byte[1024];
			int n;
			while((n=in.read(buf))>0){
				out.write(buf);
			}
		}finally{
			closeIgnoringException(in);
			closeIgnoringException(out);
		}
	
	}
	
	private static void closeIgnoringException (Closeable c){
		if(c!=null){
			try{
				c.close();
			}catch(IOException ex){
				//we have do nothing
			}
		}
		
	}
}

 

 总结:对于任何一个在finally里中肯尼个抛出的异常的,都需要try,catch

 

 

14、

不要 使用判断异常条件来终止条件

 

&和&&的却别

&&的却别是第一个条件false的是时候就不会判断第二个条件, 而&会同时判断二个条件。

 

15、多个优先构造函数 Q46

如果存在多个构造函数匹配成功,那么优先选择精确度高的进行匹配。

 

16、 s instance String  Q50

这个貌似很有用 

就算s=null 的话也是返回false,而不是抛出NullPointerException等异常

 

17、类计数器如何编写 Q55

多线程增加,和读数据都加同步关键字。

 

package com.java.tongbu;

public class Creator {
	public static     int counter=0;
	public Creator(){
		synchronized (Creator.class) {
			counter=counter+1;
		}
			
	}
	public static	synchronized  int 	 getCounter(){
		return counter;
	}
}

  /**

 * @author ZhangFuYU
 * @version 创建时间: 2012-10-17 下午03:07:20
 * 类说明:5.0之后新版本同步问题
 */
package com.java.tongbu;

import java.util.concurrent.atomic.AtomicLong;

public class NewSyn {

	private static AtomicLong numCreated=new AtomicLong();
	public NewSyn(){
		numCreated.incrementAndGet();
	}
	public static long numCreated(){
		return numCreated.get();
	}
}
 

 

18、如果覆盖了equals方法一定要同样覆盖hasCode()方法

 

19、i3=i2-i1

通过i3 的正负来判断大小是不好的 比如x=-2000000000

z=2000000000  (x-z)打印的确实294967296 

最好这样写i2>i1

 

20、用偶数判断不用基数判断

i%2==0 

 

21、

 

 

 

分享到:
评论

相关推荐

    java 解惑

    3. **java解惑.pdf**:这很可能与博客主题相呼应,详细解答了Java编程中的疑惑,比如异常处理、多线程、集合框架、内存管理等复杂话题。 4. **网络安全防护措施百分百.ppt**:网络安全是任何应用开发都不可忽视的...

    JAVA解惑.大全和问题解析

    "JAVA解惑.大全和问题解析"这个资源就是针对这些问题提供的一份详尽的解答指南。它涵盖了Java的基础知识、常见疑惑点以及易错知识点,旨在帮助Java初学者和进阶者解决实际编程中的困扰。 1. **基础概念解析**: - ...

    java优秀教程大集合

    "Java解惑(中文).pdf"是针对Java初学者的答疑解惑指南,它可能包含了一些常见问题和陷阱,以及如何避免和解决这些问题的方法,对初学者来说非常实用。 "Java深度历险.rar"可能是一本深入探讨Java高级特性的书籍,...

    2021最新java面试合集pdf.rar

    JAVA面试题解惑系列.pdf Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM与性能优化知识点整理.pdf JVM面试专题.docx JVM面试专题及答案.pdf Linux系统Redis笔记.docx MongoDB学习笔记.docx mybatis原理....

    Java培训资料

    文件"da"可能是资料的目录或者压缩包中的一个组件,其具体内容无法直接得知,但通常在Java培训资料中,这样的文件可能会包含源代码示例、项目文件、笔记或者讲义。通过这些文件,学习者可以动手实践,加深对理论知识...

    Java葵花宝典

    "Java解惑.pdf"可能是一份专门解答Java开发中常见问题和困惑的文档。开发者在实际工作中可能会遇到各种难题,这份文档可能会提供清晰的解释和解决方案,帮助他们解决实际问题,提高开发效率。 总的来说,《Java葵花...

    【狂神说】JavaSE系列.zip

    【狂神说】JavaSE系列.zip 是一个包含Java标准版(Java Standard...但根据他的教学风格,笔记可能会包含清晰的解释、实例代码和解惑答疑,以帮助学习者快速进步。对于想要自学JavaSE的人来说,这样的资源是非常宝贵的。

    后端开发技术笔记,目前包括mysql、Java GC、设计模式、数据结构.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...

    日常学习总结笔记:1.java并发 2.开源项目datax 3.数据库相关.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...

    使用docsify搭建的个人学习主站,主要记载学习笔记,包括但不限于Java多线程、设计模式、MySQL及Git等

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助...

    JSP基于SSM云笔记资料文件共享网设计可升级SpringBoot毕业源码案例设计.zip

    对于有疑问的用户,博主也提供了私聊的方式进行答疑解惑。 总之,这个项目是一个完整的云笔记应用实例,通过SpringBoot、Spring MVC、Spring Data和JSP等技术,实现了文件共享、笔记创建、编辑和检索等功能。它不仅...

    EJB资料,包括代码,课件,例子

    这些资料可能包括教程、讲座笔记、演示文稿或视频课程,旨在帮助学习者快速入门并逐步提升技能。 “查找例子分析学习的好教材”意味着这些资源不仅提供了基础知识,还鼓励学习者通过分析和修改现有的代码示例来提高...

    binus2021

    【标题】"binus2021"是一个与Java编程相关的学习...此外,它还可能包含了互动环节,如在线测验或论坛讨论,以便学习者之间交流和答疑解惑。对于Java初学者或希望深入理解Java的开发者来说,这是一个非常宝贵的资源。

    xxl-job v2.2.0解惑

    例如,`.doc`文件可能是教程或笔记,`.zip`文件可能包含了示例工程,可以下载后进行本地实践。 6. **分布式任务调度的优势**:通过分布式任务调度,可以有效地解决单机调度的局限性,提高任务处理能力,同时支持...

    基于springboot的线上教育系统源码数据库论文.docx

    3. 在线学习:用户可以观看视频课程,系统可能还包含笔记记录、进度追踪等辅助学习工具。 4. 互动交流:包括课程讨论区、问答环节,促进用户间的知识分享和答疑解惑。 5. 教师管理:教师可以发布课程、更新教学资源...

    [源代码]Python算法详解.rar

    笔记 经验 习题答案 应用设计 技术资料 电子大赛 开发板 模块 驱动开发 移动开发 加密解密 压缩解压 编译器/仿真器 多媒体处理 图形图像 游戏 音视频 传感器 连接器 软件 Altium Designer Atmel studio CAD CAM ...

    基于微信小程序的英语学习交流平台小程序+ssm.rar

    在线答疑解惑:系统支持在线答疑解惑功能,用户可以在平台上提出英语学习中遇到的问题,其他用户或专业教师可以给予解答和建议。 学习任务管理:用户可以制定学习任务并记录学习进度,系统提供任务提醒和学习计划...

    基于springboot的计算机类考研交流平台源码数据库论文.docx

    (2)资源分享:用户可上传考研资料,如笔记、讲义、模拟试题等,并附带描述和分类。 (3)论坛讨论:用户可以在特定板块发起话题,其他用户可以回复,实现在线讨论。 (4)问答求助:用户可以提出疑问,其他用户或...

    基础复习资料.zip

    2. **编程语言**:如Python、Java、C++等初学者常用的编程语言的基本语法、控制结构、函数和数据类型等。 3. **网络技术**:TCP/IP协议、HTTP协议、网络拓扑结构、网络安全和网络设备等基础知识。 4. **数据库管理**...

    springboot133在线课程管理系统.zip

    通过自动配置、起步依赖和运行时嵌入式服务器,SpringBoot使得开发者可以快速地创建出独立运行的、生产级别的Java应用。其核心特性包括: 1. 自动配置:SpringBoot会根据项目中的依赖自动配置相关的Bean。 2. 起步...

Global site tag (gtag.js) - Google Analytics