1、JAVA初始

1. JAVA发展简史

1、说说计算机语言的发展历史?

第一代:机器语言      第二代:汇编语言

第三代:高级语言      第四代:SQL语言

第一台电子计算机叫 (ENIAC即"埃尼阿克"),于1946年2月14日在美国宾夕法尼亚大学的莫尔电机学院诞生。

2、说说java语言的发展历史?

java隶属于sun公司,后来被oracle公司收购,创始人:James Gosling高司令(17年4月到aws的云计算服务部担任负责人)

(1)、J2EE (JavaEE)

Java 2 Enterprise Edition: 定位在服务器端的应用

(2)、J2SE (JavaSE)     

Java 2 Standard Edition :定位在个人计算机上的应用

(3)、J2ME (JavaME)  

Java 2 Micro Edition      :定位在消费性电子产品的应用上

3、JDK,JRE,JVM分别指的是什么,它们的关系如何?

(1)、JDK:java development kit(java开发工具包),JDK包含JRE,而JRE包含JVM。

(2)、JRE:java runtime environment(java 运行环境

(3)、JVM: java virual machine(java虚拟机:跨平台的核心

(4)、JDK,JRE,JVM三者关系概括如下:

jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。

4、java实现跨平台的核心原理是什么?

同一个java文件,在经过不同的操作系统的jvm的时候,产生不同的操作系统可识别的机器码文件,只需要给不同的操作系统配备不同的jvm就可以了,java源文件不再需要修改

5、java语言的执行分为两个步骤是什么?

(1)、编译,将源文件编译成字节码文件   

(2)、解释,将字节码文件解释成不同操作系统可识别的机器码文件

6、java开发运行步骤是什么?

(1)、创建并编辑Java源程序,用“.java”作为文件扩展名

(2)、使用命令“javac”编译“java源程序文件名.java”。最后编译成Java虚拟机能够明白的指令集合,且以字节码的形式保存在文件中。字节码文件以“.class”作为扩展名。

(3)、执行java程序,使用“java”命令运行class(字节码)文件“java文件名”,Java解释器会读取字节码,取出指令并且翻译成计算机能执行的机器码,完成运行过程。

 

 

2. JAVA各版本的含义

(1)J2EE(Java 2 Enterprise Edition):定位在服务器端的应用

      J2EEJ2SE的扩展增加了用于服务器开发的类库。如:javax.servlet。Enterprise JavaBeans 是一种用来代表企业逻辑的软件组件;JDBC则是让程序人员能直接在Java内使用的SQL的语法来访问数据库内的数据;Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术;另外还有包括XML、email及transaction等各种应用于服务器端的API。

(2)、J2SE(Java 2  Standard  Edition):定位在个人计算机上的应用

      这个版本是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在互联网上大放异彩的Applet也属于这个版本。  

(3)、J2ME(Java  Micro  Edition):定位在消费性电子产品的应用上

      J2ME是J2SE的内伸,包含J2SE的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。    

JAVA技术体系架构

1、JAVA初始_第1张图片

 

3. JAVA的特性和优势

(1)、简单性:

就是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。由于语法基于c,因此学习起来完全不费力。

面向对象:面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。

(2)、可移植性:

这是JAVA的一个重要的优势。JAVA代码或者说字节码、二进制码可以跨平台的移植,而不用管具体的操作系统和硬件环境。JAVA本身就是面向网络的,只有在网络环境中才能显示出他的优势,比如:现在我有一个网络环境,要让我的笔记本和手机交互,笔记本环境是windows发出一个让手机定时录音的JAVA代码,手机只有简单Linux内核操作系统,照样可以完美的执行这个代码。

一次编写,随处运行write once, run anywhere

JAVA在设计时就很注重移植和跨平台性。比如:JAVA的Int永远都是32位。不像c++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。

(3)、高性能:

JIT(JUST IN TIME)即时编译。将一些热点字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使JAVA程序的执行效率大大提高,某些代码甚至接待c++的效率。随着这种技术的一天天完善,也许有一天会超越编译代码的效率。

(4)、分布式:

JAVA是为internet的分布式环境设计的,因为他能够处理tcp/ip协议。事实上,通过url访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,remote method Invocation),使程序能够通过网络调用方法。

(5)、动态性:

就是在需要时将某些代码添加到正在运行的程序中。反射机制。当需要把某些代码添加到正在运行的程序中时,动态性是一个非常重要的特性。Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的多线程,多线程的使用可以带来更好的交互响应和实时行为。多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。

(6)、安全性

Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以构建防病毒,防篡改的系统。

(7)、健壮性

Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该例外抛弃。再通过异常处理机制,程序就会发现这类例外,并加以处理。

4. JAVA应用程序的运行机制

1、计算机的高级编程语言类型: 编译型 ,解释型

2、Java 语言是两种类型的结合;

(1)、利用编辑器编写 Java源程序à源文件名:主类名.java

(2)、利用编译器(javac)将源程序编译成字节码à 字节码文件名:源文件名.class

(3)、利用虚拟机(解释器,java)解释执行: 运行过程:载入、代码校验、解释执行

5. JVM

JVM(JAVA VIRTUAL MACHINE)

   JVM是一种规范,可以使用软件来实现,也可以使用硬件来实现,就是一个虚拟的用于执行bytecodes字节码的计算机。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。

      JVM负责将java字节码解释运行,边解释边运行,这样,速度就会受到一定的影响。JAVA提供了另一种解释运行的方法JIT(just in time),可以一次解释完,再运行特定平台上的机器码,高级的JIT可以只能分析热点代码,并将这些代码转成本地机器码,并将结果缓存起来,下次直接从内存中调用,这样就大大提高了执行JAVA代码的效率。这样就实现了跨平台、可移植的功能。

(1)、JVM是指在一台计算机上由软件或硬件模拟的计算机;它类似一个小巧而高效的CPU。

(2)、byte-code代码是与平台无关的是虚拟机的机器指令。

(3)、java字节代码运行的两种方式:

   1)方式interpreter(解释)

   2)Just-in-time(即时编译):有代码生成器将字节代码转换成本机的机器代码,然后可以以较高速度执行。不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。

6. Java运行时环境JRE

1Java Runtime Environment (JRE) 包含Java虚拟机、库函数、运行Java应用程序和Applet所必须文件

2Java 2 SDK (Development Kit)包含JRE的超集包含编译器和调试器等用于程序开发的文件

3、Java运行环境的三项主要功能:

(1)、加载代码:由class loader 完成;

(2)、校验代码:由bytecode verifier 完成;

(3)、执行代码:由 runtime interpreter完成。

4、JDK 和JRE:

1、JAVA初始_第2张图片

(1)、sdk(也就是jdk)是jre的超集,是在jre的基础上增加了编译器及其他一些开发工具。

(2)、jre就是java运行时环境,包括了jvm和其它一些java核心api,任何一台电脑,只有安装了jre才可以运行java程序.

5、总结:

(1)、如果只是要运行JAVA程序,之需要JRE就可以。 JRE通常非常小,也包含了JVM.

(2)、如果要开发JAVA程序,就需要安装JDK。

6、JAVA语言应用范围

(1)桌面应用编程

(2)WEB客户端编程

(3)WEB服务器编程

(4)手机编程

(5)机器人编程

7. 第一个JAVA程序

1、JAVA开发环境搭建

(1)、下载:Download J2SDK (Java  2 Software  Development Kit)  from http://java.sun.com

(2)、安装:run the executable(跟普通软件安装一样,点击下一步就OK!)

(3)、环境变量配置:

环境变量(就是为相关命令提供一个路径信息,告诉他到哪里去找相关文件信息):

设置:

1、JAVA初始_第3张图片

新增系统环境变量JAVA_HOME,设置为JDK的安装路径:

1、JAVA初始_第4张图片

修改系统环境变量Path,在最前面追加% JAVA_HOME %\bin,并以;和原路径分隔。再增加:“.;”。这是表示当前目录的意思。

1、JAVA初始_第5张图片

注意:(%JAVA_HOME%\bin)

classpath问题:如果使用jdk1.5以上就不需要配置这个环境变量!JRE会自动搜索当前路径下的类文件及相关jar文件

(4)测试安装:

运行cmd输入命令:java  –version: 出现如下结果,则通过测试。

2.  在文本编辑器中编写程序:

一个典型的JAVA程序的编写和运行过程

(1)编辑阶段:(程序员编辑代码并保存在磁盘上)

public class  Welcome{

      public static void main(String[] args){

           System.out.println("Hello java!");

      }

};

保存为:Welcome.java

(2)编译阶段。(编译器创建class字节码文件)

1.  进入java文件所在目录,执行命令:javac  Welcome.java

2.  生成class文件

执行:”Java Welcome”后发生的事。就是3-5阶段。

(3)载入阶段

程序在执行前必须首先放入内存中。这个过程是有类装载器将一个或多个class文件内容传输到内存中。”Java Welcome”激活了java解释器(jvm),然后jvm调用类装载器载入welcome.class中的信息。

(4)代码校验

JVM调用代码校验器检验加载的代码是否合法并且不会破坏java的安全性约束。

由于JAVA代码在网络环境中传播,为了避免破坏用户的文件和系统,必须保证严格的安全约束。

(5)运行阶段

计算机在CPU的控制下逐字节的执行这个程序。

3、第一个程序常见错误

(1)、出现如下错误的原因:‘java’ 不是内部或外部命令,也不是可运行的程序或批处理文件。设置path

(2)、  编译javac Test.java,明明看到该文件,为何找不到?àHelloWorld.java.txt

显示扩展名! (详细列表 / 显示所有文件 / 标题栏地址栏全路径)

(3)、NoSuchMethodError:main

     解决方案:该行代码敲错,确定是否是:public static void main(String[] args)

4、第一个JAVA程序的总结和提升

(1)、Java对大小写敏感,如果出现了大小写拼写错误,程序无法运行。

(2) 、关键字public被称作访问修饰符(access modifier),用于控制程序的其它部分对这段代码的访问级别。

(3) 、关键字class 表明Java 程序中的全部内容都包含在类中,Java是一种纯面向对象的语言。

(4) 、一个源文件中至多只能有一个public的类声明,其它类的个数不限,如果源文件中包含一个public 类,源文件名必须和它中定义的public的类名相同,且以“java”为扩展名。

(5)、一个源文件可以有多个class

     正确编译后的源文件,会得到相应的字节码文件,编译器为每个类生成独立的字节码文件,且将字节码文件自动命名为类的名字且以“class”为扩展名。

(6)、main方法是Java应用程序的入口方法,它有固定的书写格式:

(7) 、public static void main(String[]  args) {…}

     在Java中,用花括号划分程序的各个部分,任何方法的代码都必须以“{”开始,以“}”结束, 由于编译器忽略空格,所以花括号风格不受限制。

(8)、Java中每个语句必须以分号结束,回车不是语句的结束标志,所以一个语句可以跨多行。

(9)、编程风格:

     注意缩进!   成对编程!

8. 常用dos命令

常用dos命令

(1)dir   directory  查看当前目录下的文件和子文件夹

(2)cd    change directory  改变当前文件夹

(3)md    make directory创建当前文件夹

(4)rd    remove directory删除当前文件夹

(5)cls   clear screen清除屏幕

(6)切换盘符  d:  c:

(7)copy 源文件 目的文件

(8)del 文件名

(9)Tab键  帮助自动完成文件名或者文件夹

(10)上下箭头键   显示之前或者之后的命令

注意:如果需要其他的命令通过help自行查看

9. eclipse快捷键

eclipse快捷键大全

Ctrl+1  快速修复(最经典的快捷键)

Ctrl+D 删除当前行

Ctrl+Alt+ 复制当前行到下一行(复制增加)

Ctrl+Alt+ 复制当前行到上一行(复制增加)

Alt+ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)

Alt+ 当前行和上面一行交互位置(同上)

Alt+ 前一个编辑的页面

Alt+ 下一个编辑的页面(当然是针对上面那条来说了)

Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性

Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)

Shift+Ctrl+Enter 在当前行插入空行(原理同上条)

Ctrl+Q 定位到最后编辑的地方

Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)

Ctrl+M 最大化当前的EditView (再按则反之)

Ctrl+/ 注释当前行,再按则取消注释

Ctrl+O 快速显示 OutLine

Ctrl+T 快速显示当前类的继承结构

Ctrl+W 关闭当前Editer

Ctrl+K 参照选中的Word快速定位到下一个

Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)

Ctrl+/ (小键盘) 折叠当前类中的所有代码

Ctrl+× (小键盘) 展开当前类中的所有代码

Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)

Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)

Ctrl+J 正向增量查找(按下Ctrl+J,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,

个功能Idea两年前就有了)

Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)

Ctrl+Shift+F4 关闭所有打开的Editer

Ctrl+Shift+X 把当前选中的文本全部变为大写

Ctrl+Shift+Y 把当前选中的文本全部变为小写

Ctrl+Shift+F 格式化当前代码

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(:一般重构的快捷键都是Alt+Shift开头的了)

Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)

Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)

Alt+Shift+C 修改函数结构(比较实用,N个函数调用了这个方法,修改一次搞定)

Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

Alt+Shift+F Class中的local变量变为field 变量 (比较实用的功能)

Alt+Shift+I 合并变量(可能这样说有点不妥Inline)

Alt+Shift+V 移动函数和变量(

Alt+Shift+Z 重构的后悔药(Undo)

 

编辑作用域功能快捷键

全局查找并替换 Ctrl+F

文本编辑器 查找上一个 Ctrl+Shift+K

文本编辑器 查找下一个  Ctrl+K

全局撤销  Ctrl+Z

全局复制  Ctrl+C

全局恢复上一个选择  Alt+Shift+

全局剪切  Ctrl+X

全局快速修正  Ctrl1+1

全局内容辅助  Alt+/

全局全部选中  Ctrl+A

全局删除  Delete

全局上下文信息  Alt+

Alt+Shift+?  Ctrl+Shift+Space

Java编辑器 显示工具提示描述  F2

Java编辑器 选择封装元素  Alt+Shift+

Java编辑器 选择上一个元素  Alt+Shift+

Java编辑器 选择下一个元素  Alt+Shift+

文本编辑器 增量查找  Ctrl+J

文本编辑器 增量逆向查找  Ctrl+Shift+J

全局粘贴  Ctrl+V

全局重做  Ctrl+Y

查看作用域功能快捷键

全局放大 Ctrl+=

全局缩小  Ctrl+-

窗口作用域功能快捷键

全局 激活编辑器  F12

全局 切换编辑器  Ctrl+Shift+W

全局上一个编辑器  Ctrl+Shift+F6

全局上一个视图  Ctrl+Shift+F7

全局上一个透视图  Ctrl+Shift+F8

全局下一个编辑器  Ctrl+F6

全局下一个视图  Ctrl+F7

全局下一个透视图  Ctrl+F8

文本编辑器显示标尺上下文菜单  Ctrl+W

全局显示视图菜单  Ctrl+F10

全局显示系统菜单  Alt+-

导航作用域功能快捷键

Java编辑器打开结构  Ctrl+F3

全局打开类型  Ctrl+Shift+T

全局打开类型层次结构  F4

全局打开声明  F3

全局打开外部 javadoc

Shift+F2

全局打开资源 Ctrl+Shift+R

全局后退历史记录  Alt+

全局前进历史记录  Alt+

全局上一个  Ctrl+,

全局下一个  Ctrl+.

Java编辑器显示大纲  Ctrl+O

全局在层次结构中打开类型  Ctrl+Shift+H

全局转至匹配的括号  Ctrl+Shift+P

全局转至上一个编辑位置  Ctrl+Q

Java编辑器转至上一个成员  Ctrl+Shift+

Java编辑器转至下一个成员  Ctrl+Shift+

文本编辑器转至行  Ctrl+L

搜索作用域功能快捷键

全局出现在文件中  Ctrl+Shift+U

全局打开搜索对话框  Ctrl+H

全局工作区中的声明  Ctrl+G

全局工作区中的引用  Ctrl+Shift+G

 

 

文本编辑作用域功能快捷键

文本编辑器改写切换  Insert

文本编辑器上滚行  Ctrl+

文本编辑器下滚行  Ctrl+

文件作用域功能快捷键

全局保存  Ctrl+X Ctrl+S

全局打印  Ctrl+P

全局关闭  Ctrl+F4

全局全部保存  Ctrl+Shift+S

全局全部关闭  Ctrl+Shift+F4

全局属性  Alt+Enter

全局新建  Ctrl+N

项目作用域功能快捷键

全局全部构建  Ctrl+B

源代码作用域功能快捷键

Java编辑器格式化  Ctrl+Shift+F

Java编辑器取消注释  Ctrl+/

Java编辑器注释  Ctrl+/

Java编辑器添加导入  Ctrl+Shift+M

Java编辑器组织导入  Ctrl+Shift+O

Java编辑器

运行作用域功能快捷键

全局单步返回  F7

全局单步跳过  F6

全局单步跳入  F5

全局单步跳入选择  Ctrl+F5

全局调试上次启动  F11

全局继续  F8

全局使用过滤器单步执行  Shift+F5

全局添加/去除断点  Ctrl+Shift+B

全局显示  Ctrl+D

全局运行上次启动  Ctrl+F11

全局运行至行  Ctrl+R

全局执行  Ctrl+U

重构作用域功能快捷键

全局撤销重构  Alt+Shift+Z

全局抽取方法  Alt+Shift+M

全局抽取局部变量  Alt+Shift+L

全局内联  Alt+Shift+I

全局移动  Alt+Shift+V

全局重命名  Alt+Shift+R

全局重做  Alt+Shift+Y

 

11. 书籍

深入理解java虚拟机:  周志明

设计模式之禅:

12. 学习网站

国内:oschina.com、CSDN

博客园51cto

国外:github.com、stackoverflow.com

13. jdk5之后的新特性

JDK1.5新特性

(1)、自动装箱与拆箱

(2)、枚举

(3)、静态导入

(4)、可变参数(Varargs

(5)、内省(Introspector

(6)、泛型(Generic)

(7)、For-Each循环

你可能感兴趣的:(1、JAVA初始)