一、计算机常识
1.1、计算机软件分类:
系统软件:windows等
应用软件:QQ、迅雷等
1.2、人机交互分类:
图形化界面(GUI)
命令行方式(CLI)
1.3、windows下常用命令大全
Cd:进入目标路径
Cd..推出当前路径
Mk:创建文件
Rd:删除文件
Dir:列出当前目录
Cls:清屏
Exit:退出dos窗口
Cd\:回到根目录
Rd\s:删除根目录下所有的文件(windows删除时用里往外删除,在dos命令下必须先删除里面的文件保证没有任何文件下才能删除当前的文件目录)
*:代表通配符
Notepad:记事本
Help?:dos中寻找帮助的工具,可以列出所有的dos命令。
二、java语言简介
2.1、简介
java语言是一种可以编写跨平台应用软件的面向对象的程序设计语言,是由sun公司于1995年5月推出,它拥有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人pc、数据中心、游戏控制台、科学超级计算机、移动电话和互联网各大领域。
2.2、java三种技术架构
javaSE:标准版,是为了开发桌面和商务应用程序提供的解决方案。
javaEE:企业版,为了开发企业环境下的应用程序而提供的一套解决方案。
javaME:小型版,是为了开发电子消费品和嵌入式设备提供的解决方案。
2.3、特点
跨平台:平台在此所指操作系统,而操作系统指的是平台,那么它是怎么做到跨平台性的呢?因为JVM出现,只要计算机上安装上虚拟机就可以运行不同的程序。
2.4、JVM
作用:解释java语言的程序(详细请查看JVM专题学习)
2.5、开发环境
JRE:java Runtime Enviroment Java运行环境,包括java JVM和核心类库。JRE=JVM+核心类库
JDK:java Development kit java开发工具,包括java工具包,比如说javac编译器、java运行总的说来就是一句话:使用JDK开发的程序交给JRE运行。
2.6、下载和安装JDK
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装JDK:
双击运行exe即可(傻瓜式安装)
2.7、环境变量的配置
- 右击"我的电脑"----->"高级"----->"环境变量"。
- 在系统环境变量里新建"JAVA_HOME"变量,变量值为:C:\Program Files\Java\jdk1.7.0_51(根据自己的安装路径填写)。
- 新建"classpath"变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面的点)。
- 在path变量(已经存在不用新建)添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注意变量值之间用“;”隔开)。
- 验证:"开始"---->"运行"------>输入"java -version",回车,如果能正常打印出如下截图说明配置成功
环境变量解析:
- JAVA_HOME:jdk的安装路径。
- Classpath:java加载类路径,只有类在classpath中java命令才能识别,在路径前加了一个"."表当前路径。
- Path:系统在任何路径下都可以识别java、javac命令。
三、HelloWorld
3.1、Hello World代码清单
运行结果:Hello World!
从上面的程序可知:
1、java文件的扩展名为:.java
2、javac对该java文件进行编译为class文件。
3、java对生成的class文件进行运行。
3.2、类
java中类是存储代码的地方,由关键字class定义,它的书写规范如下:
1、英文和数字组合,英文单词第一个字母大写
2、如果有几个英文单词组成,每个英文单词的首字母大写
3、如果类名称或者类名称中的一个单词是字母缩写词,可以把这个缩写词中的每个字母都写成大写(如URL、HTMLParser)。因为设计的类是用来代表的对象的,所以我们在为类起名称时应尽量选择名词。
4、如果是某一种特殊类别的类,则可以统一采用特殊简短后缀来标识,这些后缀全部大写。
3.3、main函数详解(不适合初级水平)
public static void main(String[] args)
相信任何一个java开发人员,以上应该是书写最多的代码了,它是java程序运行的入口,我们是否想过为什么要这样写?其实这是一个不需要解释的问题,因为java标准就是这么规定的,那么既然是java标准规定的,我们按照规定来执行就好了,不过这样并不是一个好的学习态度,相信这样的态度对自身的技术提升也不会有太大的帮助,我们要做到知其然而知其所以然。
在java中,main()方法是java应用程序的入口方法,java虚拟机通过main方法找到需要启动的运行程序,并且检查main函数所在类是否被java虚拟机装载3,如果没有装载,那么就装载该类,并且装载所有相关的其他类,因此程序在运行的时候,第一个执行的方法就是main()方法,通常情况下,如果要运行一个类的方法,必须首先实例化出来这个类的一个对象,然后通过"对象名.方法名()"的方式来运行方法,但是因为main是程序的如楼,这时候还没有实例化对象,因此对象将main方法申明为static的,这样这个方法就可以直接通过"类名.方法名()"的方式来调用。
实例
虚拟机通过调用某个指定类的方法main启动,传递给main一个字符串数组参数,使指定的类被加载,同时链接该类所使用的其他的类型,并且初始化它们,比如对于程序:
编译后在命令行模式下键入:java HelloWorld run virtualmachine
将通过调用HelloWorld的方法main来启动java虚拟机,传递给main一个包含三个字符串"run","virtual","machine"的数组,现在来略述虚拟机在执行HelloWorld时可能采取的步骤。
开始试图执行类HelloWorld的main方法,发现该类并没有被加载,也就是说虚拟机当前不包含该类的二进制代表,于是虚拟机使用ClassLoader试图寻找这样的二进制代表,如果这个进程失败,则抛出一个异常,类被加载后同时在main方法被调用之前,必须对类HelloWorld与其他类型进行链接后初始化,链接包含三个阶段:检验、准备和解析。检验检查被装载的的主类的符号和语义,准备则创建类或者接口的静态域以及把这些域初始化为标准的默认值,解析负责检查主类对其他类或者接口的符号引用,在这一步它是可选的,类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。一个类的初始化之前它的父类必须被初始化,整个过程如下:
总结
main函数可以保证一个类的独立运行,它是程序的入口,它会被JVM所调用,是java程序的主函数,程序的开始,执行的起始点。
四、疑难问题解答
4.1、文件名保存错误
4.2、目录不对
4.3、扩展名保存不对
4.4、主函数找不到
4.5、编译失败
4.6、path与classpath的区别
path是用于定义系统中的可执行程序的所在路径,方便于执行系统中的执行文件,比如exe.bat。
classpath用于定义java的类文件class文件的所在路径,是为了让JVM去classpath路径下查找要运行的java程序。
4.7、看到类名,但是运行时找不到类的文件
类名写错,只要源文件和类名相同可以避免此错误
设置了classpath路径制定了查找路径
4.8、classpath
Setclasspath=c:\myclass
将java的类文件告诉系统,java虚拟机在执行时就会指定目录下查找,告诉java虚拟机要运行类文件的位置。
Setclasspath=c:\myclass;
多了一个分号,表示告诉JVM按照所指定的目录下查找java程序,如果没有找到会在当前目录下再次查找,一般情况下不加分号。
五、面试题
Q:What if the main method is declared as private?
A:The program compiles properly but at run time it will give "Main methodnot public." message.
Q:What if the static modifier is removed from the signature of the main method?
A:Program compiles. But at run time throws an error"NoSuchMethodError".
Q:What if I write static public void instead of public static void?
A:Program compiles and runs properly.
Q:What if I do not provide the String array as the argument to the method?
A:Program compiles but throws a run time error "NoSuchMethodError".
Q:What is the first argument of the String array in main method?
A:The String array is empty. It does not have any element. This is unlikeC/C++(读作plus plus) where the first element by default is the program name.
Q:If I do not provide any arguments on the command line, then the String array ofMain method will be empty or null?
A: It is empty. But not null.
Q:How can one prove that the array is notnull but empty using one line of code?
A:Printargs.length. It will print 0. That means it is empty. But if it would have beennull then it would have thrown a NullPointerException on attempting to printargs.length.