1.Java既可以开发web应用程序(网络应用程序),也可以开发手机应用程序,以及桌面应用程序。
2.Java的发展历程
1.www(以链接的方式连接起来)
2.java(将静态网页变成动态网页)
1990年 SUN“Green”–开发家用电器软件
1994年 Oak语言(橡树语言)
1995年 Java语言
SUN公布第一版编译器JDK1.0
Java SE 标准版 (J2SE)适用桌面应用
Java EE 企业版 (J2EE)适用网络/web应用
Java ME 微型版 (J2ME)适用手机应用
Java的开发工具包 JDK
Java的推动力主要是JCP(Java社区过程,集合多个公司和开发者参与制定文件)和JSR(Java的规范,不同的JSR有不一样的规范)
1.网络地位:Java的平台无关性让Java成为编写网络应用程序的佼佼者,Java也提供了许多以网络应用为核心的技术,是的Java特别适用于网络应用软件的设计与开发。
2.语言地位:学习Java语言不仅可以学习怎样使用对象来完成某些任务,也为今后进一步学习设计模式奠定好的语言基础。如今的Java已经和C语言有了一样的语言地位,是一门开发者必须掌握的基础语言。
3.需求地位:现在许多新技术领域都涉及Java语言,所以许多培训和招聘都需求Java软件工程师。
①它是一种面向对象的编程语言(OOP)
②它的语法结构与C和C++语言相似
③Java所用的语法十分简单
①简单易学
②面向对象
③平台无关性(Java最大的特点之一)
C、C++都有一个共同的缺点就是只能对特定的处理器(CPU)芯片进行编译。
java的运行环境是JVM(Java虚拟机)、类库和一些核心文件组成。也就是说只要平台提供了Java运行环境(JRE),Java编写的软件就可以在上面运行。
Java虚拟机的核心是字节码指令,即可以被Java虚拟机直接识别、执行的一种由0、1组成的序列代码。
字节码并非机器指令,因为它不和特定的平台相关,它都不能被任何平台直接识别、执行。
④安全稳定
⑤支持多线程
看似多线程运行同时完成了多个任务,实际上运行的只有一个,因为处理机可以在不同的线程之间快速切换,速度非常快,远超出了人接受信息的速度,才造成了多个任务同时执行的错觉。
⑥动态:Java程序的组成基本单元就是类
Java提供了大量的类以满足网络化、多线程、面向对象系统的需要:
语言包
实用程序包
I/O包
网络包
图形用户界面包
...
无直接指针操作
自动内存管理
数据类型长度固定
不用头文件
不包含结构和联合
不支持宏
不用多重继承
无类外全局变量
无GOTO
Java虚拟机(JVM)
代码安全性检测
垃圾收集机制
源程序到字节码文件后缀名为.java,是编译javac
经过编译javac转变为字节码(不是最终执行的代码,与平台无关)后形成.class文件进行运行java,之后字节码转化为设备虚拟机上进行执行。
在一台计算机上由软件或硬件模拟的计算机。
Java虚拟机读取并处理经过编译过的字节码class文件
java虚拟机规范定义了:
指令集、寄存器集、类文件结构、堆栈、垃圾收集堆、内存区域
JRE=JVM+API(是一系列的库)
在C/C++等语言中,是由程序员负责回收无用内存
Java语言自动垃圾回收:
系统级线程跟踪存储空间的分配情况
在JVM的空闲时,检查并释放那些可被释放的存储器空间
程序员无须也无法精准控制和干预该回收过程
JDK=JRE+Tools(运行环境+工具包)
JDK提供放入工具:
java编译器 javac.exe
java执行器 java.exe
文档生成器 javadoc.exe
对源程序生产一个文档,方便阅读,/** */ @xxxx是标记
java打包器 jar.exe jar cvfm A.jar A.man A.class(打包格式)
c表示创建,v表示显示详情,f表示指定文件名,m表示清单文件,A.man是清单文件,清单文件可以任意命名,常见的是MANIFEST.MF
jar文件大都是压缩文件
java调试器 jdb.exe
javaw 运行图形界面程序
javap 类名 可以查看类的信息
javap -c 类名 进行反汇编
Java的API文档
在线文档
http://docs.oracle.com/javase/8/docs/api/index.html
现在网页格式文档
doc.zip
另可以从网上搜索到chm格式的文档
Bin 该目录存放工具文件
JRE 该目录存放于java 运行环境相关的文件
Demo 该目录存放一些示例文件
Include 该目录存放和C相关的头文件
Lib 该目录存放程序库
Db 数据库相关
对象(object)
对象具有两方面的含义:
在现实世界中,是客观世界中的一个实体
在计算机世界中,是一个可标识的存储区域
(如:现实世界中的一本书,在计算机中存储就要记清楚他的作者、出版社等)
类(class)
类:具有共同属性和行为的对象集合
属性:变量(字段)
行为:函数(方法)
类和对象的关系:
类是对象的抽象(模板)
对象是类的实例
面向对象的三大特征:封装性、继承性、多态性
封装
模块化:将属性和行为封装在类中,程序定义很多类。
信息隐蔽:将类的细节部分隐藏起来,用户只通过受保护的接口访问某个类。
继承
继承性:父类和子类之间共享数据和方法
继承的好处:
更好的进行抽象和分类
增强代码的重用率
提高可维护性
多态(同一个程序,不同的行为)
不同的对象收到同一个消息(调用方法)可以产生完全不同的效果
实现的细节则由接收对象自行决定
前者是命令的路径,后者是所要引用的类的路径
javac和java命令上使用-classpath或(-cp)选项可以引用别的库
javac -cp libxxx.jar 源文件名.java
java -cp libxxx/jar 类名
这两种程序的结构和运行环境不同
前者是独立的程序,需要执行器(调用虚拟机)来执行
后者是嵌在HTML网页中的非独立的程序,有专门的appletViewer来运行,或者是由Web浏览器(调用JVM)来运行(早期的Java)
public class HelloWorldApp{
public static void main(String args[])
{
System.out.println("Hello World!")
}
}
class是主体
public类名与文件同名
main()的写法是固定的
System.out.print 及println 及printf(format格式化显示)
import java.awt.*;
import java.applet.*;
import javax.swing.*;
public class HelloWorldApplet extends JApplet{
public void paint(Graphics g){
g.drawString("Hello World!",20,20);//后面是位置
}
}
An Applet
import表示导入 类
extends JApplet 表示继承
有paint()方法,表示如何绘制
没有main()方法
html中应用的是.class文件
package 语句(0或1句)程序所在的包,即路径
import 语句(0或多句)导入其他类的类库
类定义-- class(1或多个)一个文件只能有一个public类
类=类头+类体
类成员=字段+方法
字段是属性或变量
方法及函数
方法=方法头+方法体
applet的使用:
javac HelloWorldApplet.java
appletViewer helloworldApplet.html
会出现弹窗
应用程序(Java Appliction)的输入输出可以是文本界面,也可以是图形界面
小程序(Java Applet)则只能是图形界面
没中界面都有输入和输出
文本界面(使用Scanner类)
java.util.Scanner类
用nextInt()方法还有nextDouble()
next()得到下一个单词
import java.util.Scanner;
class ScannerTest{
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数:");
int a = scanner.nextInt();
System.out.printf("%d的平方和是%d\n",a,a*a);
}
}
jdk1.5版本前,使用的是java.io包
使用System.in.read() (输入)
System.out.print()或println\printf (输出)
char c = " ";
System.out.print("Please input a char :");
try{
c = (char)System.in.read();/*强制转换并显示,try{}catch,用于判断异常*/
}catch(IOException e){
}
System.out.println("You have entered:" + c);
try{
A in = new A(new B (System.in));/*本来是只能读写一个字符,进行封装后进一步加强功能*/
s = in.readline();
}catch(IOException e)
A in = new A(new B (System.in));
System.out.print("Please input an int: ");
s = in.readLine();
n = Integer.parseInt(s);
/*可直接读一行字符串的时候,使用Integer.parseInt(s)可以转化成一个整数,当然也可以用Double.parseDouble(s)来转化成一个实数*/
在图形界面下,可以:
使用文本框对象(TextField)获取洪湖输入的数据
使用标签对象(Label)或文本框对象输出数据
使用命令按钮(Button)来执行命令
AppGraphInOut.java
通过创建一个Frame创建自己的用户界面,在构建AppFrame时,设定该Frame的大小,并用setVisible(ture)方法显示出来(extends是最好的方法)
{
...
/public void init(){
setLayout(new FlowLayout());
add(in);
add(btn);/*加入对象*/
add(out);
btn.addActionListener(new BtnActionAdapter());//处理事件
}
class BtnActionAdapter implements ActionListener//接口
{
public void actionPerformed(ActionEvent e)//具体处理事件
{
String s = in.getText();
double d = Double.parseDouble(s);
double sq = Math.sqrt(d);
out.setText(d + "的平方根是:" + sq);
}/*这段在java8中简写为btn.addActionListener(e-->{
String s = in.getText();
double d = Double.parseDouble(s);
double sq = Math.sqrt(d);
out.setText(d + "的平方根是:" + sq);
});*/
}
{
...
setLayout(new FlowLayout());
add(in);
add(btn);/*加入对象*/
add(out);
btn.addActionListener(new BtnActionAdapter());//处理事件
}
class BtnActionAdapter implements ActionListener//接口
{
public void actionPerformed(ActionEvent e)//具体处理事件
{
String s = in.getText();
double d = Double.parseDouble(s);
double sq = Math.sqrt(d);
out.setText(d + "的平方根是:" + sq);
}/*这段在java8中简写为btn.addActionListener(e-->{
String s = in.getText();
double d = Double.parseDouble(s);
double sq = Math.sqrt(d);
out.setText(d + "的平方根是:" + sq);
});*/
}
同时作为Application和Applet的程序
是Applet的派生
含有main()
在main()中创建一个用户界面,并将这个Applet加入
开发环境
IDE中快速输入代码
在eclipse中
输入main再按Alt+/ 键,得到main函数
输入sysout再按Alt+/ 键,得到System.out.println("");
更多的可在Window-Preferences-Java-Editor-Templates查看