1.简介

  Java是1995年6月由Sun公司引进到我们这个世界的革命性的编程语言。1990年Sun公司成立了由James Gosling领导的开发小组,开始致力于开发一种可移植的、跨平台的语言,该语言能生成正确运行于各种操作系统、各种CPU芯片上的代码。他们的精心专研和努力促成了Java语言的诞生。

印度尼西亚有一个重要的盛产咖啡的岛屿叫Java,中文译名为爪哇,开发人员为这种新的语言起名为Java,其寓意是为世人端上一杯热咖啡。

  Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

  Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

2. 发展

1991年,SUN公司的Green项目,Oak
1995年,推出Java测试版
1996年,JDK1.0
1997年,JDK1.1
1998年,JDK1.2,大大改进了早期版本缺陷,是一个革命性的版本,更名为Java2。
2004年,J2SE 5.0 (1.5.0) Tiger老虎
2006年,J2SE 6.0 (1.6.0) Mustang野马
2011年,JavaSE7.0 Dolphin海豚
2014年,JavaSE8.0

3. 特点

3.1面向对象

  Java是面向对象的编程语言,将在以后详细、准确地讨论类、对象、继承、多态、接口等重要概念。

3.2平台无关性

  Java不同于一般的编译语言或解释型语言。它首先将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,从而具有“一次编写,到处运行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的运行速度有了大幅提升。

  平台无关性即在一个计算机上编译得到的字节码文件可以复制到任何一个安装了Java运行环境的计算机上直接使用。字节码由Java虚拟机负责解释运行,即Java虚拟机负责将字节码翻译成本地计算机的机器码,并将机器码交给本地的操作系统来运行。

说明:

1.平台与机器指令

这里所指的平台是由操作系统(Operating System, OS)和处理器CPU所构成。与平台无关是指软件的运行不因操作系统、处理器的变化而无法运行或出现运行错误。

每个平台都会形成自己独特的机器指令,所谓平台的机器指令就是可以被该平台直接识别、执行的一种由0,1组成的序列代码。相同的CPU和不同的操作系统所形成的平台的机器指令可能是不同的。比如,某个平台可能用8位序列代码00001111表示加法指令,以10000001表示减法指令,而另一种平台可能用8位序列代码10101010表示加法指令,以10010011表示减法指令。

2.举例对比C/C++程序依赖平台

C/C++针对当前C/C++源程序所在的特定平台对其源文件进行编译、链接,生成机器指令,即根据当前平台的机器指令生成可执行文件.

不能保证C/C++源程序所产生的可执行文件在所有的平台上都能正确地被运行,其原因是不同平台可能具有不同的机器指令(如图1.2所示)

3.Java虚拟机与字节码

Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编译,而是针对Java虚拟机把Java源程序编译成称为字节码的“中间代码”可以被Java虚拟机直接识别、执行的一种由0,1组成的序列代码。

字节码并不是机器指令,因为它不和特定的平台相关,不能被任何平台直接识别、执行。Java针对不同平台提供的Java虚拟机的字节码指令都是相同的,Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码,如图1.3所示。

3.3 多线程

  Java的特点之一就是内置对多线程的支持。多线程允许同时完成多个任务

3.4动态

  Java程序的基本组成单元就是类,有些类是自己编写的,有一些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分布环境中动态地维护程序及类库。

3.5简单

  Java要比C++简单,C++中许多容易混淆的概念,或者被Java弃之不用了,或者以一种更清楚更容易理解的方式实现。

4 脉络

0.前定义
1.数据类型
2.运算
3.语句
4.输入输出
5.高级功能
6.应用

5.开发步骤

5.1Java程序的开发步骤

1) 编写源文件:扩展名必须是 .java。
2) 编译Java源程序:用Java编译器(javac.exe)编译源文件,得到字节码文件。
3) 运行Java程序:使用Java解释器(java.exe)来解释执行字节码文件。

5.2简单Java程序

5.2.1源文件的编写与保存

Java应用程序的源文件是由若干个书写形式互相独立的类组成

例子1:源文件Hello.java是由Hello和Student的类组成。

package app1_1;// Netbeans建立项目时增加的部分
public class Hello {
public static void main (String args[]) {
System.out.println("大家好!");
System.out.println("Nice to meet you");
Student stu = new Student();
stu.speak("We are students");
}
}
class Student {
public void speak(String s) {
System.out.println(s);
}
}

  • 1 编写源文件

使用一个文本编辑器,如Edit或记事本编写上述例子1给出的源文件。
Java源程序中语句所涉及到的小括号及标点符号都是英文状态下输入的括号和标点符号,比如“大家好!”中的引号必须是英文状态下的引号,而字符串里面的符号不受汉字符或英文字符的限制。

  • 2. 保存源文件

如果源文件中有多个类,那么只能有一个类是public类;如果有一个类是public类,那么源文件的名字必须与这个类的名字完全相同,扩展名是java;如果源文件没有public类,那么源文件的名字只要和某个类的名字相同,并且扩展名是java就可以了。
上述例子1中的源文件必须命名为Hello.java。我们将Hello.java保存到C:\chapter1文件夹中。

  • 3.编译

编译器(javac)
进入逻辑分区C的chapter1目录中,使用编译器javac编译源文件(如图1.13):
图1.13 使用javac编译源文件
C:\chapter1> javac Hello.java

图1.13 使用javac编译源文件

  • 4.运行

1.应用程序的主类
一个Java应用程序必须有一个类含有

public static void main(String args[ ])

方法,称这个类是应用程序的主类

保存   有public修饰类.java 或  均无public的话,其他类.java

运行 主类(有psvm方法的类)的main方法

2.解释器(java)
使用Java虚拟机中的Java解释器(java.exe)来解释执行其字节码文件。Java应用程序总是从主类的main方法开始执行。因此,需进入主类字节码所在目录,比如C:\chapter1,然后使用Java解释器(java.exe)运行主类的字节码. 图1.14 使用java解释器运行程序 
C:\chapter1\> java Hello

图1.14  使用Java解释器运行程序

例子2

class A {
public static void main(String args[]) {
People zhubajie;
zhubajie = new People();
zhubajie.height = 170;
zhubajie.ear = "两只大耳朵";
System.out.println("身高:"+zhubajie.height);
System.out.println(zhubajie.ear);
zhubajie.speak("师傅,咱们别去西天了,改去月宫吧");
}
} public class People {
int height;
String ear;
void speak(String s) {
System.out.println(s);
}
}

5.3java反编译

JDK提供的反编译器是javap.exe(也有真对Java的许多商业反编译软件,例如dj-gui反编译)。如果想反编译例子1中的Hello.class,可使用javap命令:javap Hello.class ,例如:

C:\chapter1\> javap Hello.class

如果想反编译类库中的Date类(其包名是java.util)Date.class,可使用javap命令:javap java.util.Date.class,例如:

C:\chapter1\> javap  java.util.Date.class

302Java_前定义的更多相关文章

  1. 浏览器加载和渲染HTML的过程(标准定义的过程以及现代浏览器的优化)

    先看一下标准定义的浏览器渲染过程(网上找的): 浏览器打开网页的过程 用户第一次访问网址,浏览器向服务器发出请求,服务器返回html文件: 浏览器开始载入html代码,发现 head 标签内有一个 l ...

  2. javaScript中定义类或对象的五种方式

    第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Obj ...

  3. yii2系统定义的常用路径别名

    @yii 表示Yii框架所在的目录,也是 yii\BaseYii 类文件所在的位置: @app 表示正在运行的应用的根目录,一般是 digpage.com/frontend :物理路径 @vendor ...

  4. [前端]前端面试题第二波~[http/tcp/网络篇]

    目录: Cookie 是否会被覆盖,localStorage是否会被覆盖? 如何保持登陆状态? Ajax原生 Jsonp的原理.怎么去读取一个script里面的数据. 如果页面初始载入的时候把ajax ...

  5. LoadRunner11脚本小技能之添加请求头+定义变量+响应内容乱码转换打印+事务拆分

    一.添加请求头 存在一些接口,发送请求时需要进行权限验证.登录验证(不加请求头时运行脚本,接口可能会报401等等),所以需要在脚本中给对应请求添加请求头.注意:请求头需在请求前添加,包含url类.su ...

  6. 《徐徐道来话Java》(1):泛型的基本概念

    泛型是一种编程范式(Programming Paradigm),是为了效率和重用性产生的.由Alexander Stepanov(C++标准库主要设计师)和David Musser(伦斯勒理工学院CS ...

  7. 【腾讯Bugly干货分享】JSPatch 成长之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...

  8. ABP框架 - 数据传输对象

    文档目录 本节内容: DTO 必要性 领域层的抽象 数据隐藏 序列化和延迟加载问题 DTO 约定和验证 示例 DTO和实体间自动映射 使用特性和扩展方法进行映射 辅助接口和类 Data Transfe ...

  9. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

随机推荐

  1. SQL Server如何使用OPENQUERY访问另一个SQL Server

    在项目中,经常会遇到一个数据库访问另一个数据库,[CNVFERPDB]为服务器名,[CE3]为库名 SELECT Dtl.* FROM CNVFERPDB. CE3.ce3.ZTLE0125 Dtl ...

  2. Array.prototype.forEach()&&Array.prototype.map()

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach https ...

  3. struts2 no extension(excludePattern)

    采用struts2 小伙伴非常希望更改或删除action扩展,本文将帮助你实现 struts2-core-2.3.16.jar , 下载链接: http://repo1.maven.org/maven ...

  4. WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)

    原文 WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程 ...

  5. EasyUI学习之menu and button(菜单和按钮)

    前言 今天下午的天气感觉格外的气闷,整个人有一种黏糊糊的感觉,格外的不舒服.加之立即要放假了了,感觉自己全然坐不住呢(节前综合症么).只是学习还是的继续的. 原定计划这篇文章本来应该是关于search ...

  6. NLP(paper + code)

    0. 开源的库 genism keras wrapper of theano/TensorFlow 1. CNN for NLP Convolutional Neural Networks for S ...

  7. memmove、memccpy和memcpy

    这三个函数都是内存拷贝,目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中.        void *memmove(void *dest,void*src,int count)      v ...

  8. Hibernate_12_HQL句子

    使用HQL查询功能: (1)与SQL相似,SQL用. (2)SQL查询的是表和表中的列.HQL查询的是对象与对象中的属 (3)HQL的keyword不区分大写和小写,类名与属性名是区分大写和小写 (4 ...

  9. .net元数据

    概要 现在,在.net开发平台计划,其组成编译:IL代码.资源.程序集清单和类型元数据.我们知道,IL代码就是我们编写的代码.资源就是图片文件.xml文件,及其它文件,只有不清楚的是元数据(在这里将程 ...

  10. 人活着系列Tanya和蔡健雅猪 (floyd)

    人活着系列之芳姐和芳姐的猪 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 芳姐特别喜欢猪,所以,她特意养了m个猪圈,顺便在k条无向边,每条边有都有起点v ...