陈翔 南京大学计算机科学与技术系 chenxiang.nju@gmail.com Java语言程序设计基础 陈翔 南京大学计算机科学与技术系 chenxiang.nju@gmail.com 2017/3/17
上课要求 请保持安静 2017/3/17
Java简介 Sun公司(2009年被Oracle 公司收购)1995年推出 2017/3/17
Java简介 Java的出现推动了Web迅速发展 Struts、Hibernate、Spring等开发框架 2017/3/17
Java语言的出现推动了开源软件的发展 SourceForge 2017/3/17
Java语言特点 简单 纯面向对象 分布式语言 健壮性 没有C、C++语言中的指针;没有多重继承;没有操作符重载; 提供网络编程类库;提供RMI(Remote Method Invocation)机制 健壮性 强类型机制、异常处理、垃圾内存自动搜集机制等 2017/3/17
Java语言特点 安全性 跨平台 解释型语言 高性能 多线程 在网络环境下,提供安全机制防止恶意代码攻击 直接提供类库支持多线程编程 2017/3/17
Java的创始人 James Gosling Sun副总裁及研究院院士 2017/3/17
名字起源 Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。 Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。 SUN和JAVA的标识也正是一杯正冒着热气的咖啡。 2017/3/17
Java平台体系 Java SE(Standard Edition) Java EE (Enterprise Edition) 针对桌面程序 Java EE (Enterprise Edition) 针对企业级软件 Java ME (Micro Edition) 针对移动设备和嵌入式设备 2017/3/17
不断扩展的平台 2017/3/17
参考教材 Thinking in Java 4th by Bruce Eckel 2017/3/17
参考教材 Core Java 8th Vol1, Vol2 2017/3/17
参考教材 Effective Java 2nd by Joshua Bloch 2017/3/17
Java虚拟机 在一台计算机上由软件模拟的假想的计算机。Java虚拟机的代码存储在class文件中(也称为字节码文件)。 2017/3/17
Java虚拟机 任何一个编译器,不是JVM的内容。 2017/3/17
JVM执行步骤 Step1:编辑源代码 Step2:JAVA编译器将其编译为class文件(JVM规范的字节码) 加载代码:由class loader完成 校验代码:由bytecode verifier完成 执行代码:由runtime interpreter完成 2017/3/17
Java虚拟机的建立 Java虚拟机的建立需要针对不同的软硬件平台做专门的实现。 2017/3/17
无用内存自动回收机制 2017/3/17
面向过程的编程风格 int maxSoFar=0,price=1; //最大值maxSoFar的初值为0 //price是输入的值 while(price>0){ //循环输入price的值 if (price>maxSoFar) //输入的值price大于最大值maxSoFar maxSoFar=price; //则maxSoFar的值为price的值 String input=JoptionPane.showInputDialog("Enter the next price"); //继续输入price price=Double.parseDouble(input); } //把字符串input转换成整数price System.out.println(“The maximum is ”+maxSoFar); //打印最大值maxSoFar } 2017/3/17
面向对象的编程风格 Max max=new Max( ); //max是类Max的一个对象 while(price>0){ max.updateMax(price); //对象max调用updateMax方法,更新最大值 price=max.getPrice( ); //对象max调用getPrice获得下一个price的值 } System.out.println("The maximum is "+max.getMax( )); //对象max调用getMax方法获得最大值,并打印出来 类的开发者 类的使用者 2017/3/17
Java程序分类 Java Application Java Applet 通常称为Java应用程序,以main()方法作为程序入口,由Java解释器加载执行。 Java Applet 通常称为Java小应用程序,通过浏览器或者是appletviewer命令加载执行。Applet是Java最早获得成功的应用。 2017/3/17
Java应用程序(Application)举例 //这是我们的第一个java application,该程序保存在文件Property.java中 import java.util.*; /*下面我们用到了Date和Properties这两个类, 是属于java.util这个包的;而System和Runtime这两个 类,是属于java.lang这个包的。*/ public class Property { //程序员给这个类取名为Property public static void main(String args[]){ //main是类的主方法 System.out.println(new Date( )); //在命令行下面打印出日期 Properties p=System.getProperties( ); //获得系统的Properties对象p p.list(System.out); //在命令行下打印出p中的各个系统变量的值 System.out.println("--- Memory Usage:"); /*打印一行字符串---Memory Usage*/ Runtime rt=Runtime.getRuntime( ); //获得系统的Runtime对象rt System.out.println("Total Memory= " + rt.totalMemory( ) //打印总内存大小 +" Free Memory = " +rt.freeMemory( )); //打印空闲内存大小 } } 动画演示 2017/3/17
Java Application的编辑 2017/3/17
Java Application的编译 Java编译器命令:javac 命令行中输入:javac Property.java 源文件名为Property.java,注意:文件名必须与公共类名相同;由javac编译器编译源程序,产生字节码文件(.class文件)。本例中产生Property.class文件。 2017/3/17
Java Application的执行 Java执行命令:java 命令行中输入:java Property 2017/3/17
Java小应用程序(Applet)举例 //这是我们的第一个java applet,该程序保存在文件HelloEducation.java中 import java.awt.Graphics; //在进行显示输出时,需要用到类Graphics的对象; import java.applet.Applet; //Applet类是所有的java applet的父类; public class HelloEducation extends Applet { //程序员给这个类取名为HelloEducation所有的applet程序都是Applet类的子类 public String s; public void init() { s=new String(“Welcome to Tongfang Education”); //生成一个字符串对象 } public void paint(Graphics g){ g.drawString(s,25,25); //在浏览器中坐标为(25,25)的位置显示字符串s } 2017/3/17
Java Applet的执行 Java Applet不能字节执行,需要编写html文件,把Applet嵌入其中。例如HelloEducation.html文件 <html> <applet code=HelloEducation.class width=250 height=250> </applet> </html> 2017/3/17
Java Applet的执行 用appletviewer来运行,在命令提示符下输入:appletviewer HelloEducation.html 弹出窗口运行该程序 2017/3/17
Java Applet的执行 在支持Java的浏览器上运行。如在IE或Netscape中打开HelloEducation.html程序。 2017/3/17
Java程序结构 package语句 //0或1条,必须放在文件开始 import语句 //0或多条,必须放在所有类定义之前 public classDefinition //0或1个。文件名必须与该类的类名完全相同 classDefinition //类定义,个数不限 interfaceDefinition //接口定义,个数不限 2017/3/17
Java程序结构示例 package javawork.helloworld; /*把编译生成的所有.class文件放到包 import java.awt.*; //告诉编译器本程序中用到系统的AWT包 import javawork.newcentury; /*告诉编译器本程序中用到用户自定义 的包javawork.newcentury*/ public class HelloWorldApp{......} /*公共类HelloWorldApp的定义, 名字与文件名相同*/ class TheFirstClass{......} //第一个普通类TheFirstClass的定义 class TheSecondClass{......} //第二个普通类TheSecondClass的定义 ...... //其它普通类的定义 interface TheFirstInterface{......} //第一个接口TheFirstInterface的定义 ...... //其它接口定义 2017/3/17
package语句 包(package)是用于管理生成的java字节码文件(.class),其对应于文件系统中的目录,目的是把编译生成的.class文件放入该目录。 例如:javawork.helloworld对应于目录“path\javawork\helloworld,其中path需在编译时指定,且该目录须存在;如果javawork\helloworld不存在则创建该目录。例如: javac -d f:\javaproject HelloWorldApp.java 则生成的HelloWorldApp.class文件将放在目录 f:\javaproject\javawork\helloworld\中 2017/3/17
package语句 如果程序中没有package语句,或者有package语句但是在编译时不用-d选项,则生成的.class文件放入当前目录。 2017/3/17
Import语句 在程序中用到了标准类库或自定义包中的类,需要用import语句来声明。 可以声明一个包:import java.awt.* 在引用到类或者包时,将沿着类路径classpath开始寻找相应的.class文件,因此需要事先设置环境变量classpath: classpath=.;d:\jdk1.3\lib\ 2017/3/17
Java程序结构 源文件的命名规则 如果.java文件包含一个public类,它必须按该类名命名。 2017/3/17
Java编程规范 包名 类名 接口名 方法名 变量名 常量名 全小写,一般为名词,如:java.awt.event; 首字母大写,每个单词的首字母大写,如:class HelloWorldApp; 接口名 同类名,如:interface Collection; 方法名 一般为动词,小写字母开头,每个单词的首字母都要大写,如:balanceAccount, isButtonPressed; 变量名 全小写,一般为名词,如:length; 常量名 基本类型的常量名为全大写,如:int YEAR, int WEEK_OF_MONTH;对象常量大小写混合。 2017/3/17
Java帮助文档 Jdk1.3\docs\index.html 2017/3/17
Java帮助文档 查阅JDK命令,选择Tool Documentation 2017/3/17
Java帮助文档 Java、javac、javadoc、appletviewer 2017/3/17
Java帮助文档 查阅类库文档,选择Java 2 Platform API Specification 2017/3/17
Java注释 单行注释:从“//”开始到本行结束的内容都是注释,例如: //这是一行单行注释 //则是另一行单行注释 //这是一行单行注释 //则是另一行单行注释 多行注释:在“/*”和“*/”之间的所有内容都是注释,例如: /*这是一段注释 分布在 多行之中 */ 2017/3/17
Java注释 文档注释:当程序员编完程序以后,可以通过JDK提供的javadoc命令,生成所编程序的API文档,而该文档中的内容主要就是从文档注释中提取的。该API文档以HTML文件的形式出现,与java帮助文档的风格与形式完全一致。凡是在“/**”和“*/”之间的内容都是文档注释。如:DocTest.java文件。 2017/3/17
Java注释 /** 这是一个文档注释的例子,主要介绍下面这个类 */ public class DocTest{ /** 变量注释,下面这个变量主要是充当整数计数 */ public int i; /** 方法注释,下面这个方法的主要功能是计数 */ public void count( ) {} } 2017/3/17
在命令行输入:javadoc DocTest.java,生成了介绍类DocTest的index.html文件 文档注释的生成 在命令行输入:javadoc DocTest.java,生成了介绍类DocTest的index.html文件 2017/3/17
Eclipse环境中使用Javadoc 项目生成Javadoc 2017/3/17