Java笔记

1. entrySet问题

如果映射表的类型不确定,需要把entrySet()的返回值转换为Set<Map.Entry>,否则编译出错。

 

 

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test2 {
    public static final void main(String[] args) {
	Map<String, String> map = new HashMap();
	for (Map.Entry entry : map.entrySet()) {
	    System.out.println(entry.getKey() + "," + entry.getValue());
	}
	Map map2 = map;
	for (Map.Entry entry : (Set<Map.Entry>)map2.entrySet()) {
	    System.out.println(entry.getKey() + "," + entry.getValue());
	}
	System.out.println("Hello, world!");
    }
}

map2.entrySet()前的类型转换不能省略。

 

 

2. 泛型T通过返回值的类型进行判定,有时会导致编译错误。

例如Collections.emptyList()的返回值类型为List<T>

 

 

    public List<Integer> getID(int i) {
	    return (i == 0) ? (List)Collections.emptyList() : new ArrayList<Integer>();
    }

  这里的Collections.emptyList()前的类型转换不能省略。

 

 

3. 从转储(Dump)文件中调试并除错

http://www.ibm.com/developerworks/cn/java/j-memoryanalyzer/

 

4. 生产环境jvm内存运行1小时,就接近xmx,系统奇慢。

http://www.iteye.com/topic/1116650?page=5

 

5. 远程调试Java程序

 

 

http://www.infoq.com/cn/articles/basic-java-debugging 写道
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=8000
你现在可以利用下面的命令行用JDB连接:
jdb -attach 8000
或者在Windows上:
jdb -connect com.sun.jdi.SocketAttach:port=8000

 

Java调试——回归基础

http://www.infoq.com/cn/articles/basic-java-debugging

 

使用 Eclipse 远程调试 Java 应用程序

http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/

 

6. 调整AWT窗口客户区大小

如果用setSize,只能修改整个窗口的大小(包括标题栏)

可以先创建一个Panel(或者是Canvas,Applet),添加到Frame,然后用

 

 

setPreferredSize(new Dimension(800, 600))

 

修改Panel的Preferred大小,再用

 

frame.add(panel); //如果是JFrame则是.getContentPane().add()
frame.pack();

 

让Frame自己计算大小。

(有些控件如Button可以不用setPreferredSize,

因为它自己会自动扩大成按钮文本的大小)

 

由于上面的Panel被套在里面,所以一开始是无法监听键盘事件(除非用鼠标点击),

所以最好在setVisible后让其马上获取焦点。

 

		frame.setVisible(true);
		panel.requestFocus(); 

 

 

7. 取消AWT窗口的最大化和添加关闭事件(用于游戏窗口)

 

	frame.setResizable(false);
	frame.setLocationRelativeTo(null);
	frame.addWindowListener(new WindowAdapter() {
	    @Override
	    public void windowClosing(WindowEvent e) {
		System.exit(0);
	    }
	});
	frame.setVisible(true);

 

8. -XX:+ShowMessageBoxOnError

http://www.iteye.com/topic/1119313?page=2

http://www.oracle.com/technetwork/java/javase/clopts-139448.html#gbmui

 

9. 异常的性能问题

http://www.iteye.com/topic/857722

http://www.blogjava.net/stone2083/archive/2010/07/09/325649.html

 

10. JPEGCodec编译错误

http://rxxluowei.iteye.com/blog/671893

http://blog.csdn.net/defonds/article/details/6314723

删除JRE,然后再次添加。

 

11. 收录各种猥琐的Java笔试/面试题目

http://blog.csdn.net/smcwwh/article/details/7315041

 

12. asArray()类型转换异常问题:

String files [] = (String []) arrList.toArray ();会抛异常。

解决方法是改为使用asArray()的带参数重载版本

String files [] = (String []) arrList.toArray (new String [arrList.size ()]);

见:

http://www.coderanch.com/t/378558/java/java/Class-Cast-exception-ArrayList-toArray

 

13. SIGTERM信号处理

kill -15

Runtime.getRuntime().addShutdownHook()

http://www.iteye.com/topic/1122093?page=2

 

(20120617)

14. 讲解如何在C/C++中调用Java的方法

http://tech.ccidnet.com/art/297/20050413/237901_1.html

http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html

 

 

(20131202)

15. Applet改写为Application问题

(参考自

https://github.com/Amarang/RPGgit

* getDocumentBase()会抛异常,需要做一些处理,例如(用于复杂目录树,不能使用getClass()的情况下)

 

	public Image getImage(URL url, String name) {
		if (!isApplet) {
			try {
				return ImageIO.read(new File(".", name));
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		} else {
			return super.getImage(url, name);
		}
	}

 

* main函数书写

 

	private boolean isApplet = true;
	public static void main(String[] args) { 
		Frame frame = new Frame();
		XXXApplet app = new XXXApplet();
		app.isApplet = false;
		app.init();
		frame.add(app);
		frame.setSize(800, 600);
		frame.setVisible(true);
	} 

 * 读取简单文件流(使用getClass(),无需判断是否为Applet)

			InputStream is = getClass().getClassLoader().getResourceAsStream(fileName);
		

 

* 读取图片或音频(单一目录,使用URL,无需判断是否为Applet)

 

			URL soundURL = getClass().getResource("music/glory.wav");
			intro = Applet.newAudioClip(soundURL);

 

 

(20140610:)

16. BufferdInputStream方法出现异常:Resetting to invalid mark

在构造函数参数中指定更大的缓存大小(默认为8K)

 

//Exception in thread "main" java.io.IOException: Resetting to invalid mark
    		InputStream inputStream = new BufferedInputStream(new FileInputStream(filename), 1024 * 1024 * 5);
    		

 

(20141211)

17. 避免Eclipse的jsp引用搜索,提高搜索速度

Eclipse预设:Window->Preferences->Web->JSP Files->Search->Include JSP matches in Java searches.

去掉勾选

 

 

(20150106)

18. SWT中List控件不需要长按Ctrl键实现多选

方法是添加SWT.SIMPLE风格位,例如:

 

listName = new List(compositeBody, SWT.BORDER | SWT.MULTI | SWT.SIMPLE | SWT.H_SCROLL | SWT.V_SCROLL);

 

参考:

http://bbs.csdn.net/topics/320187649?list=lz

或参考List的实现(OS.LBS_EXTENDEDSEL表示需要按Ctrl键才能多选)

 

int widgetStyle () {
	int bits = super.widgetStyle () | OS.LBS_NOTIFY | OS.LBS_NOINTEGRALHEIGHT;
	if ((style & SWT.SINGLE) != 0) return bits;
	if ((style & SWT.MULTI) != 0) {
		if ((style & SWT.SIMPLE) != 0) return bits | OS.LBS_MULTIPLESEL;
		return bits | OS.LBS_EXTENDEDSEL;
	}
	return bits;
}

 

 (20150320)

19. maven用法(mvn命令行)

(1) 复制依赖jar:

mvn dependency:copy-dependencies -DoutputDirectory=lib   -DincludeScope=compile 

参考:

http://www.iteye.com/problems/56981

(2) 打印依赖树

mvn dependency:tree

(3) 编译

mvn compile

(4) 打包jar

mvn package

(5) 插件帮助

mvn xxx:help

 

 

(2015/04/16)

20. 从v2.3.0开始jogl的javax包名改变(查看jogl-all.jar)

写道
javax.media.opengl is now com.jogamp.opengl

旧项目如果要兼容,需要使用v2.2.4或之前版本的jogl

 

参考:

http://stackoverflow.com/questions/7210194/where-can-i-find-the-package-javax-media-opengl

http://jogamp.org/deployment/archive/rc/

 

 

20161115

跳过测试

方式1:

mvn install -Dmaven.test.skip=true

方式2:在pom.xml里面配置

<plugins>

      <plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-surefire-plugin</artifactId>

        <configuration>

          <skip>true</skip>

        </configuration>

      </plugin>

</plugins>

参考:

https://my.oschina.net/u/865478/blog/159657

 

 

(TODO)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java笔记是由北京大学青鸟教育推出的一款专门针对Java语言的学习工具。它以全面、系统、实践为特点,通过详细的代码示例和清晰的讲解,帮助学习者全面掌握Java编程语言。 Java笔记采用了线上与线下相结合的学习模式。学员可以通过手机、平板电脑、电脑等设备在线学习,还可以在学习过程中随时记录自己的学习笔记。同时,北大青鸟还为学员提供线下实践环境,学员可以在实验室里亲自动手实践所学知识,加深理解和应用。 Java笔记的内容非常全面,包括了Java语言的基本语法、面向对象编程、异常处理、流操作、多线程、数据库操作等众多知识点。除了理论知识,Java笔记还提供了大量的实例代码,可供学员参考和模仿。这样的学习方式既帮助学员理解Java的基本概念,又能让他们运用所学知识解决实际问题。 与此同时,Java笔记还注重学员的互动交流。在学习过程中,学员可以利用笔记功能记录学习心得和疑惑,还可以在论坛上与其他学员进行讨论和交流。这种互动形式既能促进学员之间的学习互助,也能更好地帮助学员理解和应用所学知识。 总之,Java笔记是北大青鸟推出的一款专注于Java语言学习的工具,通过系统的课程设置、丰富的实例代码和互动交流的方式,帮助学员全面掌握Java编程知识,提升编程能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值