分类目录

展开|收起

看你喜欢

(1) (1) (42) (1) (1) (1) (16) (2) (1) (1) (4) (1) (2) (7) (4) (1) (1) (1) (1) (3) (1) (5) (1) (1) (1) (1) (1) (2) (1) (4) (4) (3) (1) (1) (2) (1) (37) (2) (1) (5) (3) (1) (4) (1) (1) (11) (3) (1) (9) (3) (1) (23) (2) (1) (2) (1) (1) (1) (1)

最新精华

C程序员的第一个JAVA程序(JAVA开发环境搭建)

最近由于要学习Android应用开发,才知道Android程序目前只支持JAVA语言开发,所以只好先把JAVA语言研究了下(零基础自学JAVA,呵呵,最后发现并没有想象中的困难),网上下了Bruce Eckel的《Thinking in Java 3th Edition》的翻译版,虽然书比较老,2002年,对初学JAVA语言足够了,等有机会再看看其它的。此书的确经典,翻译得也很到位,虽然有950页,但看起来不累,大概花了2个星期走马观花看了一遍。2006年,有了第四版《Thinking in Java 4th Edition》,网上也有个中文版,不知道是谁翻译的,和第3版的翻译差得太多,简直令人看不下去(也许我不应该先看第3版的翻译),真是不比不知道,看来翻译也是个技术活,并不是什么人都能干好的。Bruce Eckel之前还写过《Thinking in C++》,对C++也很熟悉,所以在《Thinking in Java》中讲了很多C/C++和JAVA的区别,对有C/C++经验的人学习JAVA很有用,比网上写的这方面文章全面多了,当然你得花点时间去读这本比较厚的书。

光看书容易忘掉学习过的内容,所以看完书后,下了第三版、第四版的源代码,安装了JDK(Java Development Kit),跑了一些java程序,总算是对JAVA有个初体验了。后来也用eclipse搞了个java工程,编译运行了下。这些是为后面的Android应用开发作准备。后来一鼓作气,把Android开发环境也搭建了下,居然比较顺利地搞定了,在模拟器上成功运行了hello world程序,这个打算在下一篇文章中再详细说明下。本文先介绍下JDK的安装和使用。

1. 安装JDK(Java Development Kit)

JDK下载(jdk-7u25-windows-i586.exe,91M): Java SE Development Kit 7 Downloads,然后安装

jdk-7u25-windows-i586-install-1

2.  解压“JAVA编程思想第三版源代码”

JAVA编程思想第三版源代码

3. 运行第一个JAVA程序

cd L:\LAMP\android\Java\Thinking in Java\JAVA编程思想第三版源代码\c02

javac  HelloDate.java // 编译,最后得到的实际是HelloDate.class,然后可以用JAVA虚拟机来解释执行这个文件

java  HelloDate // 运行HelloDate.class,不像C程序那样直接运行可执行程序,因为.class并不是编译成本地机器码,而是JAVA字节流,需要JAVA虚拟机来解释执行这个文件。编译后得到的.class,还有一种叫JAVA applet小程序(其对应的.java文件中没有main函数,需要指定加载点),可通过浏览器来初始化JAVA环境并执行,这个JAVA applet是J2EE(Java 2 Platform,Enterprise Edition)的WEB客户端程序,和服务器端的Java Servlet和Java Server Pages (JSP) 的组件相配合,就形成了强有力的动态可扩展的WEB应用开发框架。

HelloDate-java

看下源代码:

//: c02:HelloDate.java
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
import java.util.*;

/** The first Thinking in Java example program.
 * Displays a string and today's date.
 * @author Bruce Eckel
 * @author www.BruceEckel.com
 * @version 2.0
*/
public class HelloDate {
  /** Sole entry point to class & application
   * @param args array of string arguments
   * @return No return value
   * @exception exceptions No exceptions thrown
  */
  public static void main(String[] args) {
    System.out.println("Hello, it's: ");
    System.out.println(new Date());
  }
} ///:~

原来JAVA也有main函数,不过必须要作为类的public static类型的成员函数,必须要这样申明main函数。Date类在java.util类库中,所以程序一开始要导入该类库jimport java.util.*。System类在java.lang类库中,这个库是默认导入到每个java文件中的,所以不需要import。out是System类的一个静态属性(变量),它的类型是PrintScreen类。因为out是静态的,所以不需要创建任何东西,out对象便已经存在了,只须直接调用即可。所以System.out.println意思就是调用System类静态变量out的println方法(static类型属性或函数可以按类名直接调用,不需要创建上层类如这里的System类的对象实例),这个方法是打印然后换行。结果类似:

Hello, it's:
Wed Jul 10 22:53:31 CST 2013

是不是觉得很简单呢?另外,有没有注意到最后一个语句从C++的角度看似乎有点问题:System.out.println(new Date()),其中我们new了一个Date对象,用过之后好像没有释放内存,会不会导致内存泄漏?答案是不会,这个是JAVA和C++很大的不同之处。JAVA中创建对象之后,尽管使用,不用关心对象的释放。当这个对象不再被使用时,垃圾回收器(gc, garbage collection)会检测到,会在某个时刻自动回收该对象的内存空间。因此,上面的程序中就不用关心new Date()出的对象的清除工作了。

这个垃圾回收器看起来很完美,但是事物总有两面性,垃圾回收器有一个缺点就是你从来都不能确切地了解它将于何时启动并将持续多久。这就意味着一个JAVA程序的执行速度会有前后不一致的情况,因此JAVA语言不适合用于对程序执行速度要求一致的系统,如路由器、交换机等实时性要求高的通信系统设备中,这些设备还是C语言的天下。

4. 导入自定义包

上面这个例子只用到了JDK系统包import java.util.*,所以一切很顺利。如果要执行其他章节的程序,由于import了作者自定义的包com.bruceeckel.simpletest.* ,这时需要到“我的电脑->属性->高级->环境变量->系统变量”中添加环境变量classpath,值为.;D:\Program Files\Java\javatest (我已把L:\LAMP\android\Java\Thinking in Java\JAVA编程思想第三版源代码\com目录拷贝到D:\Program Files\Java\javatest,这个com目录中包含的是作者写的包)

看下L:\LAMP\android\Java\Thinking in Java\JAVA编程思想第三版源代码\c04\Arrays.java这个程序

//: c04:Arrays.java
// Arrays of primitives.
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
import com.bruceeckel.simpletest.*;

public class Arrays {
  static Test monitor = new Test();
  public static void main(String[] args) {
    int[] a1 = { 1, 2, 3, 4, 5 };
    int[] a2;
    a2 = a1;
    for(int i = 0; i < a2.length; i++)
      a2[i]++;
    for(int i = 0; i < a1.length; i++)
      System.out.println(
        "a1[" + i + "] = " + a1[i]);
    monitor.expect(new String[] {
      "a1[0] = 2",
      "a1[1] = 3",
      "a1[2] = 4",
      "a1[3] = 5",
      "a1[4] = 6"
    });
  }
} ///:~

运行结果如下:

a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6
注:网上下的源码,需要修改文件com\bruceeckel\simpletest\OutputVerifier.java中这行
((String)out[i]).compareTo(expected[i]) < 0

(out[i]).compareTo((String)expected[i]) < 0
否者会报错

5. 配置ant工具(就是JAVA中的makefile工具)

如果测试每个程序都自己敲javac编译,敲java运行,如果源文件很多的话,也是很繁琐的,这时可以用javac *.java来编译某个目录下的所有JAVA程序,还有一个更好的选择,就是安装ant工具(作用就是JAVA中的makefile工具),只要配置好build.xml(JAVA编程思想的源代码中已经有这个文件了),只要敲ant就能帮你编译和运行程序了,如同C程序的make。

下载ant工具:http://ant.apache.org/,然后安装

注:需要修改文件\com\bruceeckel\tools\CheckVersion.java,注释掉对JDK版本号的检查

    /*if(minor < '4' || point < '1')
      throw new RuntimeException("JDK 1.4.1 or higher " +
        "is required to run the examples in this book.");
    System.out.println("JDK version "+ version + " found");*/

进入一个目录,如果这个目录下有build.xml,就可运行ant,一般这个文件中会有说明介绍如果执行ant(带参数),如AVA编程思想的源代码中的build.xml有如下描述:


  build.xml for c04 of "Thinking in Java, 3rd Edition"
  by Bruce Eckel
  Available at http://www.MindView.net
  See copyright notice in CopyRight.txt

  Ant must be downloaded from:

http://jakarta.apache.org/ant

  Options:
  ant
    compiles and runs all examples (if necessary)
  ant test
    compiles and runs all examples
  ant c04.build
    compiles but does not run examples
  ant clean
    removes old class files

所以如果执行ant test,就是编译和运行所有示例。

注:ant工具需要定义一些环境变量,以便知道JDK以及类库的安装路径,一般要定义下面2个(如果还提示错误,自行根据错误提示增加路径即可):
(1)JAVA_HOME值为: D:\Program Files\Java\jdk1.7.0_25(你安装JDK的目录)
(2)CLASSPATH值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;

看一个ant的实际例子:

cd L:\LAMP\android\Java\Thinking in Java\JAVA编程思想第三版源代码\c04, 然后执行ant test,就是依次编译和执行这个目录下的所以例子程序,如下:

ant-test

6. GUI示例

Java编程思想第四版源码中有个gui目录,里面有十几个GUI小程序,例如FileChooserTest.java

//: gui/FileChooserTest.java
// Demonstration of File dialog boxes.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import static net.mindview.util.SwingConsole.*;

public class FileChooserTest extends JFrame {
  private JTextField
    fileName = new JTextField(),
    dir = new JTextField();
  private JButton
    open = new JButton("Open"),
    save = new JButton("Save");
  public FileChooserTest() {
    JPanel p = new JPanel();
    open.addActionListener(new OpenL());
    p.add(open);
    save.addActionListener(new SaveL());
    p.add(save);
    add(p, BorderLayout.SOUTH);
    dir.setEditable(false);
    fileName.setEditable(false);
    p = new JPanel();
    p.setLayout(new GridLayout(2,1));
    p.add(fileName);
    p.add(dir);
    add(p, BorderLayout.NORTH);
  }
  class OpenL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      JFileChooser c = new JFileChooser();
      // Demonstrate "Open" dialog:
      int rVal = c.showOpenDialog(FileChooserTest.this);
      if(rVal == JFileChooser.APPROVE_OPTION) {
        fileName.setText(c.getSelectedFile().getName());
        dir.setText(c.getCurrentDirectory().toString());
      }
      if(rVal == JFileChooser.CANCEL_OPTION) {
        fileName.setText("You pressed cancel");
        dir.setText("");
      }
    }
  }
  class SaveL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      JFileChooser c = new JFileChooser();
      // Demonstrate "Save" dialog:
      int rVal = c.showSaveDialog(FileChooserTest.this);
      if(rVal == JFileChooser.APPROVE_OPTION) {
        fileName.setText(c.getSelectedFile().getName());
        dir.setText(c.getCurrentDirectory().toString());
      }
      if(rVal == JFileChooser.CANCEL_OPTION) {
        fileName.setText("You pressed cancel");
        dir.setText("");
      }
    }
  }
  public static void main(String[] args) {
    run(new FileChooserTest(), 250, 150);
  }
} ///:~

执行下:

L:\LAMP\android\Java\Thinking in Java\Java编程思想第四版源码\gui>java FileChooserTest

结果如下图:

filechoosetest

点击open按钮,弹出打开文件的窗体,注意下是不是和VC的窗体有些不一样呢,这是因为JAVA的awt库对GUI的呈现加了一层控制,据称由于awt库的隔离效应,JAVA程序在各种OS下的GUI界面是完全一样的,我还没试,不知道是不是这样。

filechoosetest-open

7. 用eclipse开发JAVA程序

开发一个复杂点的JAVA程序,需要一个IDE来提高效率,eclipse是最常用的。

下载地址: http://www.eclipse.org/downloads/,不需要安装,解压后运行eclipse.exe即可启动程序。

下面是用eclipse建了一个JAVA工程(file–>new—>Java Project),包含了和前面第一个程序相同源码L:\LAMP\android\Java\Thinking in Java\JAVA编程思想第三版源代码\c02\HelloDate.java(添加源代码文件:工程里src目录右键–>New–>File–>Advanced),然后编译执行,截图如下:

eclipse-java-1

eclipse-java-2

eclipse-java-3

《Thinking in Java》第3、第四版,书和源码:

JAVA编程思想第三版源代码
标题: JAVA编程思想第三版源代码 (1269 次点击)
文件: JAVA编程思想第三版源代码.rar
大小: 826 kB
描述:
Thinking in Java 3th Edition
标题: Thinking in Java 3th Edition (703 次点击)
文件: Thinking-in-Java-3th-Edition.7z
大小: 4 MB
描述:
Thinking in Java 4th Edition
标题: Thinking in Java 4th Edition (699 次点击)
文件: Thinking-in-Java-4th-Edition.7z
大小: 4 MB
描述:
ThinkingInJava第四版源代码
标题: ThinkingInJava第四版源代码 (848 次点击)
文件: ThinkingInJava第四版源代码.rar
大小: 775 kB
描述:

  打分:5.0/5 (共2人投票)
(浏览总计: 460 次)
Add Comment Register



发表回复

  

  

  

您可以使用这些HTML标签

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>