阵营
人们在认识事物的时候,很喜欢贴标签、归类、划阵营。越是阅历多就越会这样。
这也不完全是什么坏事,至少可以把事物间作个对比、归纳。
java到底是一种什么样的语言呢?
首先,她是一门高级语言。这是与机器语言、汇编语言相比较而言的。
也就是说,她主要还是为了方便人的理解与阅读,并不是优先考虑机器的执行效率。
其次,我们总喜欢把高级语言划分为“编译型”与“解释型”。比如,c是编译型的:
因为我们需要先用编译器把源代码转换为机器能懂的可执行代码,然后去执行。
注意,这个可执行代码是与机器和操作系统密切相关的。windows下的可执行程序,拿到苹果电脑上,根本无法运行。
比如:python就是解释型的,也被称为“脚本语言”。
python源码不需要编译,而是在需要执行的时候,用解释器一边翻译一边执行,这当然会有点慢,但获得了强大的动态能力。
Java呢? 二者皆非。
Java采用了当时还比较新潮的思路(在今天当然不足为奇了):
她把源码不进行彻底的编译,而是编译到半山腰,形成一种运行在理想的或说假想的机器上的代码。
因为这台机器是假想的,因而也就不会有windows, Linux,或是x86, power pc 等软硬件上区别。
这台假想的机器,在不同的真实机器上,可以通过不同的软件模拟出来。被称为“虚拟机”
这样大费周折所换来的好处是:跨平台。
具体地说,可以把java产生的这种中间产品(字节码)拷贝到任何主流的操作系统上都能执行。
这就是java提出的口号,所谓:一次编写,到处运行。
你有可能会不服气,说c语言的源码不也可以到处拷贝并编译运行吗?
python的源码不也可以到处运行的吗?
这可不一样,别人传播的是源码,java传播的是字节码。开发者一般不愿意自已的源码直接给用户的。
另外,java这样做也提高了代码的运行效率。因为编译器可以使用各种优化技术,程序规模越大越有优势。
当然,比起c语言的彻底编译,执行效率上还不如c,但由此获得的其它优势足以弥补此不足。
加上其它方面的改进,使得java从诞生后就一路走红,连续霸占TIOBE开发语言流行度的榜首。
所以,无论你学过什么语言,都应该至少了解java。
安装方法
可以从网上下载java语言的对应操作系统的安装包。
如果是windows系统,可以选择那种可执行文件自动安装的,也可以只下载zip包,解开就可以了。
全自动安装过程很简单,网上资料铺天盖地,这里就不重复介绍。
需要强调的是,它与直接解压的那种安装方法比,多做了两件事:
1. 为path环境变量增加了java虚拟机的位置信息。
2. 注册了一个java update程序,能时不时提示你更新java包。
如果你对windows注册表深恶痛绝,最好直接解压文件。抛开这些不算,java是“纯绿色软件”,它并不依赖注册表就能很好地干活。
java安装虽然容易,还有一件值得一提:
当下,我们的机器大都是64位的处理器,java可以选32位的,也可以选64位的。
这个你要想清楚,因为有的软件对java虚拟机版本有要求。
比如,eclipse32位版本的就只认32位java虚拟机,不对就会报错。
实际上,我们安装的java是两套产品:JDK和JRE
JRE是java运行时环境,有了它就可以执行无论谁给你的 *.class文件。这个是给java最终用户用的。
JDK是包含了编译器等在内的一套开发工具包,是给java开发者用的。
JDK中包含了JRE。
问: 安装了JDK还要再安装JRE吗?
答:不用,因为包含了。
问:可以安装多个版本的JDK吗?
答:可以。用的时候指明用哪个。如果不指明,path中认定哪个就是哪个。
问:jdk的路径是应该加在path前边还是后边?
答:都可以,系统能找到就行。但为了防止夜长梦多,还是加在前边更靠谱些。
小试牛刀
安装好了JDK,会用记事本,会用cmd。咱们可以开发java了。
首先用记事本写一个纯文本文件,名字可叫 MyA.java
其中的内容如下:
1 public class MyA 2 { 3 public static void main(String[] args){ 4 System.out.println("hello....java"); 5 } 6 }
然后,在cmd窗口,输入命令:
javac MyA.java
如果一切顺利,会没有任何返回的信息(没有坏消息,就是好消息!)
但此时,你的目录下已经多了一个文件: MyA.class
它就是那个著名的 字节码 文件了。
然后,当然是用虚拟机去运行它了: java MyA 就可以了。
假如没有产生那个class文件,那有可能是java没有安装好或者path环境变量配置的问题。
源码解读
第1行,定义了一个类,名字是MyA。
从形式上看,java程序就是由若干的类组成的。
在每个文件中,可以定义多个类,但只有一个主类。
这里的MyA就是一个主类,因为它以public修饰。
在类中,可以定义数据和方法。
main是主类中的一个方法。调用它的人会传入一个字符串数组。
该方法没有返回值。
这个方法是静态方法,因为以static修饰。至于什么是静态方法,我们可以在面向对象一节中再去了解。这里,可以先把它想象为类似c语言中的函数就好了。
System是系统定义的类,out是它的一个成员,println是该成员的方法。
println类似于c语言的printf,它的任务是在标准输出设备(默认就是屏幕)上输出信息。
Java程序总是从主类的main方法开始执行,也就是说,main方法会自动执行。
因为我们在控制台执行MyA.class的时候,并没有提供更多的参数,所以那个传入参数,就是args字符串数组是空的。并且我们也没有在程序中使用它。
怎样编辑纯文本
如果不知道其它的软件,用记事本就可以顺利完成上面的任务。
但记事本太过简陋,有的时候不能满足我们的要求。
你可以使用自己更喜欢的文本编辑器,比如,许多人用的:notepad++,editplus,ultraEdit,sublimeText 等。
但绝不能使用word,因为它是富文本编辑器,要复杂得多,产生的文本是有格式的。
如果设置得当,上面介绍的那些纯文本编辑器都可以对java代码进行着色。这样看起来会更舒服一些。
当然,编译和运行程序还是要去cmd窗口中执行。除非你使用了额外的所谓“插件”,扩展了编辑器的功能。
如果你很不喜欢在cmd窗口中干活,或者你希望有代码提示或称为代码自动补全功能,可以使用更为专业的所谓IDE工具。
IDE是集成开发环境的意思,就是把源码的编辑,编译,运行,调试,打包,部署等诸多功能都集成到一个软件中。
当然这会比较庞大,比较复杂,掌握起来更有难度。
比较常用的IDE是 eclipse,myEclipse,IntelliJ IDEA,NetBeans 等,可以百度安装。
如果你是初学者,建议使用 JCreator,这个IDE十分小巧,轻便,很适合学习与实验的场合。
推荐使用Jcreator的2.0 版本,新的版本功能更多,bug也就更多,但并非我们关心的。
常见错误
运行javac 的时候出现的错误属于编译错误,一般都是语法问题,容易解决。
比如,这个:
这是由于把String 误写为string 造成的,java像c语言一样是大小写敏感的。
再看这个:
这是由于在句子的结束位置没有分号造成的。
java也像c语言一样,每个句子都要用分号结尾,如果忘了写分号,就会被认为是与下一行同一个句子了。
再看:
这次有分号啊,怎么还错呢?
这是因为用了中文的分号的缘故。
除非是用在字符串中,其它位置的符号都应该是西文符号。
这个呢?类名是Mya,文件名却是MyA,这是不行的。
主类的名字必须与文件名完全一致。
命名的约定
虽然说,起个什么样的名字只是个人爱好问题,但遵守一些约定还是必要的。
java编码约定:
1 类名的首字母要大写。换单词的时候还要再次大写。
比如:MyGoodClass 就是合格的类名。写成mygoodclass 从语法上说也不错,但不符合约定。
2 方法的名字首字母小写。换单词的时候大写。
比如:myFirstFunc,不要写成 my_first_func,或MyFirstFunc
在前边看到的短短的源码中,有许多类名,有些是我们自己定义的,有些是系统定义的。
String, System是系统定义的类名, MyA 是我们自己定义的类。
args是变量名,main,println 是方法名。