• 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大法好……
  • 相关阅读:
    BZOJ4916: 神犇和蒟蒻 杜教筛
    BZOJ 4816: [Sdoi2017]数字表格 莫比乌斯反演
    BZOJ 4407: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数
    BZOJ 3963: [WF2011]MachineWorks 斜率优化 + splay动态维护凸包
    BZOJ 1492: [NOI2007]货币兑换Cash 斜率优化 + splay动态维护凸包
    BZOJ 3306: 树 LCT + set 维护子树信息
    小A与最大子段和 斜率优化 + 二分 + 细节
    BZOJ 3675: [Apio2014]序列分割 动态规划 + 斜率优化 + 卡精度
    BZOJ 2726: [SDOI2012]任务安排 斜率优化 + 凸壳二分 + 卡精
    luoguP2365 任务安排 斜率优化 + 动态规划
  • 原文地址:https://www.cnblogs.com/joyeecheung/p/3843707.html
Copyright © 2020-2023  润新知