Java学习笔记 1

安装JDK

以前搭hadoop的时候给ubuntu装过,学algorithms的时候给win装过……还都是JDK7,总之不用再装了=___,=

这里是个不错的教程:How to Install Oracle Java on Ubuntu Linux 和配套的升级教程:How to Upgrade Oracle Java on Ubuntu Linux

安装eclipse

以前入门安卓的时候在win下装过(然后就被我果断坑掉了),记得貌似也是点点点就装好了,Ubuntu要从头装一次

在Ubuntu 12.04下安装eclipse:How to install eclipse in ubuntu 12.04

注意:eclipse自带的那个icon跟个乒乓球那么大,无论是gnome还是unity都不能直接拿去做launcher,要稍微动下手脚,没有记哪里找到的解决方法,即时搜就可以了。

开始入门

用eclipse自带的教程就可以开始入门HelloWorld了。

注:eclipse自带的SWT教程居然自带大坑……按照上面的步骤来做会报类似于“no swt-gtk-4427 in java.library.path”的错误,因为它没说全步骤……解决方法在这里 (图形界面好蛋疼……)

折腾编译

学会了用eclipse导入第三方jar来编译之后,我决定来折腾一下命令行编译。

搜索了一下找到了一个应该OK的解决方案:How to compile a .java file in Java?(果然想把eclipse自带教程的程序手动编译试试的折腾星人不止我一个……)

首先把之前按教程写的HelloWorldSWT.java cp到另一个地方去,接着尝试编译,用eclipse下的jar的绝对路径放到classpath里面:

$ javac -cp /opt/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_*.jar HelloWorldSWT.java

编译OK,跑跑看

$ java -cp /opt/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_*.jar:. HelloWorldSWT

结果报错了……

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Display
	    at HelloWorldSWT.main(HelloWorldSWT.java:19)
	Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Display
	    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	    at java.security.AccessController.doPrivileged(Native Method)
	    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	    ... 1 more

中途手误了几次在运行的时候没有把当前目录也放进cp,遇到了这样的错误: Error: Could not find or load main class

另外找到了一个很棒的小技巧:用debug模式去看eclipse是用什么命令执行你的程序的: Can I run from command line program created by Eclipse?

发现eclipse在用的命令没有星号,我又试着把星号去掉用jar的实际路径代替一下试试(记得当初跑hadoop也遇到过类似的问题是这样解决的)

$ javac -cp /opt/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_3.103.0.v20140605-2012.jar HelloWorldSWT.java
$ java -cp /opt/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_3.103.0.v20140605-2012.jar:. HelloWorldSWT	

结果居然成功了Orz 原来stackoverflow上已经有人解释过了,java的wildcard和平时在bash里用的是不一样的: Setting multiple jars in java classpath

OK,换种方法跑

java -cp "/opt/eclipse/plugins/*:." HelloWorldSWT

居然成功了,跪……

写几个小程序

挑了一本free book Think Java来看,虽然是针对不会编程的初学者的书,不过刚好是给APCS学生写的,实训的那个GridWorld就是书上讲解的一部分。挑了一些课后习题来做,都放在我的github上了(新一点的eclipse都自带git支持的,点点点就行了……)

因为GridWorld是APCS的program,所以网上资料多到爆,youtube上也有很多视频。随手找了一个导入eclipse的教程: Getting Started with Eclipse for Java and GridWorld 无痛安装完毕,一运行就跑出那个小虫虫了……

看书

不知道看Head First Java好还是Core Java比较好……不过翻了一下Core Java,发现蛮有趣的,决定看后者了。 大概看了第一章,有一些比较好玩的点

  • Java白皮书在这里
  • Java的特性被刻意设计成了精简版的C++,去掉了一大堆繁杂难懂的东西,还把指针换成了引用+GC
  • C++的多重继承在Java里被简化成了interface
  • Java的int总是32位,String总是Unicode
  • 各种宣扬JIT大法好……
posted @ 2014-07-14 23:00  Joyee  阅读(1503)  评论(0编辑  收藏  举报