0. 申明在前
“占着”自己那丢丢能给让我混口饭吃的C/C++开发基础,以下内容直接采取“霸王硬上弓”的方式,若有理解不到位之处,请您不吝赐教。谢谢。
1. 开发环境
说过很多次,笔者双电脑环境:Windows 7上安装了JDK + eclipse集成开发环境(IDE),Linux mint 18上搭建了JDK + apache 环境,Windows上写的代码通过对比工具(beyondcompare/winmerge)对比到Linux进行测试。
2. file & code
a. file
java源代码以.java结尾,且class类名与文件名必须相同(不明原因),这一点在eclipse上添加class时由IDE自动保证(即自动创建对应的classname.java文件和classname类)。我们用IDE创建一个TestMain类;
b. code
最开始IDE自动生成的class只有publicclass TestMain{}这点代码,我们在其中添加import、void main等相关代码后如下,然后通过对比工具拷贝到Linux上。这样,就有了一个能编译/运行的类。
import java.util.*;
/** class comment*/
public class TestMain {
/** method comment*/
public static void main(String[] agrs) {
System.out.println("Hello world!");
}
}
3. compile & execute
a. 编译compile
类似于C/C++的编译工具:gcc/g++,java有自己的编译工具:javac。在JDK解压目录的bin目录下。如图所示:
我们用javac编译我们的类,编译后产生对应的TestMain.class文件,如下:
zhaogang@zglinux ~/code_my/javacode/test_main $ javac TestMain.java
zhaogang@zglinux ~/code_my/javacode/test_main $ file TestMain.class
TestMain.class: compiled Java class data, version 52.0 (Java 1.8)
b. 执行execute
这里不像C/C++,用gcc/g++编译产生的东西直接可以作为Linux进程被加载(如命令:./test.out),Java代码编译产生的类需要用java独有命令加载,如:java TestMain,据说是因为java代码要运行在虚拟机(JVM:java virtual machine)中,有关JVM的知识我还一窍不通。所以呢,大家只需要知道用:
java TestMain
加载运行刚才编译的Java程序就行了。
4. 代码理解
1)java是一种完全面向对象(OOP)的编程语言,JAVA中奉行“一切皆对象”。因而,helloworld源码中有类(class):TestMain;
2)与C++的概念相似,一个类class由成员变量 + 成员函数 组成,在java分别称为字段Field + 方法Method。因而TestMain类中有方法main;
3)按照进程的概念,一个可以执行的程序必须有且仅有一个程序入口(类似与c程序中的main)。因而,我们把方法命名为main,作为java程序的入口。
4)import是java的关键词,意为“导入”。由于我们需要在控制台中打印helloworld字符,因而我们可能需要用别的类来帮助我们打印,类似于c代码中用#include包含相应头文件(stdio.h)后才能使用printf打印。在Java中使用java.util.*中类来帮助我们打印。这里*表示通配符,就是说java.util作为一个java包,可能包含很多类(类似于c制作静态链接库时可以打包多个文件),我们把它的所有类都import到我们的代码中。关于使用通配符这点,貌似比C要先进。
5)关于main方法前的static,这里先回顾下c语言中static的用法
a. 修饰全局变量:
static int g_iGlobal;
限制全局变量的作用域为本文件,变量存储于静态存储区;
b. 修饰局部变量
static int iLocal;
将变量iLocal存储于静态存储区,函数结束时变量不销毁,下次进入该函数时此static变量维持上次的值不变。
c. 修饰函数
static void test_func()
{
…
return;
}
限制函数的作用域为本文件。
java中static(可能不全,请大神补充):
→ 当声明一个事务为static时,意味着这个域 或 方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。因而,可以猜测println就是一个static方法(因为我没有创建类的实例呀);
→ java程序的入口函数main方法必须是static的,不然不能执行,报错:
zhaogang@zglinux~/code_my/javacode/test_main $ java TestMain
Error: Main method is not static in classTestMain, please define the main method as:public static void main(String[]args)
想想原因(瞎猜的),因为我们没有创建TestMain类的实例,而想把此程序搞起来,所以结合第一条,必须把main方法申明为static。
6) 注释
与C/C++类似,java有//和/**/两种类型注释,我们用/***/(多了一个*,其实无所谓,多N个*都可以)是看书上说可以用javadoc工具生成类的说明文档,具体操作请搜度娘。
7) 其他尚未理解的事项…...