您的位置:首页 > 编程语言 > Java开发

coreJava简介及关键字介绍

2016-01-25 11:02 260 查看
第一天:

教学任务:

完成前言和第一章内容的讲解,共40个slice。

目标: 1. Java背景知识介绍;

2. Java开发环境设置;

3. 编写、编译、运行Java程序的过程;

课程安排:

第一章:Getting Started 1天

第二章:Identifiers,Keywords,and Types 1天

第三章:Expressions and Flow Control 1天

第四章:Arrays 1天

第五章:Objects And Classes 2天

第六章:Advanced Language Features 2天

第七章:Exceptions 1天

第八章:Building GUIs 1天

第九章:The AWT Event Model 1天

第十章:Java Foundation Classes 1天

第十一章:Threads 1天

第十二章:Stream I/O And Files 1.5天

第十三章:Networking 1.5天

------------------------------------------------------------

java历史

SUN 是“Stanford University Network”

1982年,Sun Microsystems公司诞生于美国斯坦福大学校园。Sun公司1986年上市,在NASDAQ的标识为SUNW后改为J***A。

Java的历史可以追溯到1991年4月,Sun公司的James Gosling领导的绿色计划(Green Project),其原先的目的是为家用消费电子产品开发一个分布式代码系统,这样我们可以把E-mail发给电冰箱、电视机等家用电器,对它们进行控制,和它们进行信息交流。开始,准备采用C++,但C++太复杂,安全性差,最后基于C++开发一种新的语言Oak(Java的前身),Oak是一种用于网络的精巧而安全的语言,Sun公司曾依此投标一个交互式电视项目,但结果是被SGI打败。

  直至 1994年下半年,由于Internet的迅猛发展和环球信息网的快速增长,第一个全球信息网络浏览器Mosaic诞生了;此时,工业界对适合在网络异构环境下使用的语言有一种非常急迫的需求;Games Gosling决定改变绿色计划的发展方向,他们对Oak进行了小规模的改造,就这样,Java在1995年的3月23日诞生了!Java的诞生标志着互联网时代的开始,它能够被应用在全球信息网络的平台上编写互动性及强的Applet程序,而1995年的Applet无疑能给人们无穷的视觉和脑力震荡。但没有相应的开发库而只靠Java语言来进行开发肯定是困难重重,所以Sun公司在1996年的1月23日发布了JDK
1.0来帮助开发人员的开发。JDK包括两大部分:运行环境和开发工具。

引言:

1. Why(为什么要学习Core Java)?

Core Java是Java语言的基础,其它Java技术均是构建在Core Java基础之上。

2. What(Core Java课程学习什么)?



1) Java编程语法(字符集、条件语句、循环语句);

2) Java编程语言面向对象的概念;

3) 图形用户界面(GUI)编程;

4) 多线程;

5) 网络;

前 言:

第一章: Getting Started(19)

目标:

Sun公司在推出Java语言的同时,也推出了Java的一系列开发工具,如JDK――Java Development Kit(Java开发工具包)。

可以从网上免费下载。通常以JDK的版本来定义Java的版本。

时间 版本 在Java标准函数库中的类(class)的数量

----------------------------------------------------------------------

1996 JDK1.0(Java1.0) 250 重点applet

1997 JDK1.1(Java1.1) 500 比较适于开发图形界面

1998 JDK1.2(Java2) 2300 可达到平台原始速度,可用于书写正规企业级应用程序或移动应用程序

2000 JDK1.3(Java2)

2002 JDK1.4(Java2) 计算能力大幅度提升

2004 JDK1.5(Java5.0) 3500 对语言本身作重大改变,更稳定、更安全、更高效

JDK的实际版本是从1.1推进到1.2,但因变化幅度大,所以用全新的命名。JDK1.2至JDK1.4版本还可以称为Java2.

目前JDK最为成熟的版本为JDK1.5, 也称为JDK5.0, 它还有一个吸引人的商业名叫Tiger.

Sun公司认为JDK1.5的发布是Java语言发展史上的又一里程碑事件。为了表示这个版本的重要性,JDK1.5也称为JDK5.0。

JDK6 Mustang 野马

注:Java 3或4从来没有出现过,实际版本一直从1.0推进到1.5,所谓Java2或Java 5.0只不过是销售的小把戏。(比java好的语言有很多,SUN拉拢了IBM、Oracle、Borland、BEA等一起对抗微软)

补充:JDK主要包括内容:

a. Java虚拟机:负责解析和执行Java程序。Java虚拟机可运行在各种平台上;

b. JDK类库:  提供最基础的Java类及各种实用类。java.lang, java.io, java.util, javax.swing和java.sql 包中的类都位于JDK类库中。

c. 开发工具: 这些开发工具都是可执行程序,主要包括:

javac.exe 编译工具;

                  java.exe 运行工具;

javadoc.exe 生成JavaDoc文档的工具

jar.exe 打包工具

等。



1. 设置Java开发环境;



a. 获取J2SDK;

b. 安装J2SDK;

c. 设置环境变量:



J***A_HOME:

1) 作用:简化其它变量设置过程中的内容输入。在变量设置过程中有可能要多次使用到JDK的安装路径,如何简化

多次输入过程? 可先行将JDK的安装路径定义为一变量,以后凡使用到JDK安装路径的地方均使用该变量

进行替换。

path:

1) 作用:指定执行外部命令时找寻对应可执行文件的路径范围;

2) 设置:

i. windows

[开始]->[控制面板]->[系统]->[高级]->[环境变量]->[新建环境变量]命令,就可以创建环境变量path

path %J***A_HOME%\bin;%path%

重启命令行窗口,变量即生效。window系统对path命令的大小写不敏感。echo %path%、echo %Path%、

echo %PATH%均显示设定的path变量值。

ii. bash

编辑用户home路径下.bashrc文件,增加新行:

export PATH=$J***A_HOME/bin:$PATH



PATH=$J***A_HOME/bin:$PATH

export J***A_HOME PATH

然后在bash shell上运行. ./.bashrc, 其中第一个.代表执行。echo $PATH显示设定的path变量值。

iii.sh

编辑用户home路径下.profile文件,增加新行:

export PATH=$J***A_HOME/bin:$PATH



PATH=$J***A_HOME/bin:$PATH

export J***A_HOME PATH

然后在sh shell上运行. ./.profile, 其中第一个.代表执行。echo $PATH显示设定的path变量值。

iv. csh

编辑用户home路径下.cshrc文件,增加新行:

setenv path $J***A_HOME/bin:$path



set path=($J***A_HOME/bin $path)

然后在csh shell上运行source .cshrc。echo $path显示设定的path变量值。



classpath:

1) 作用:代表Java类的根路径。java命令会从classpath中寻找所需的Java类, Java编译器编译Java类时,也会从

classpath中寻找所需的Java类。classpath的默认值为当前路径。

2) 设置:

i. windows

[开始]->[控制面板]->[系统]->[高级]->[环境变量]->[新建环境变量]命令,就可以创建环境变量classpath

classpath .;%classpath%

重启命令行窗口,变量即生效。window系统对classpath命令的大小写不敏感。echo %classpath%、

echo %ClassPath%、echo %CLASSPATH%均显示设定的classpath变量值。

ii. bash

编辑用户home路径下.bashrc文件,增加新行:

export CLASSPATH=.:$CLASSPATH



CLASSPATH=.:$CLASSPATH

export CLASSPATH

然后在bash shell上运行. ./.bashrc, 其中第一个.代表执行。echo $CLASSPATH显示设定的classpath变量值。

iii.sh

编辑用户home路径下.profile文件,增加新行:

export CLASSPATH=.:$CLASSPATH



CLASSPATH=.:$CLASSPATH

export CLASSPATH

然后在sh shell上运行. ./.profile, 其中第一个.代表执行。echo $CLASSPATH显示设定的classpath变量值。

iv. csh

编辑用户home路径下.cshrc文件,增加新行:

setenv classpath .:$classpath



set classpath=(. $classpath)

2. 理解Java语言特征;



Java语言包括语法规则和语法规则的实现。Sun公司对Java语言有自己的一份参考实现:JDK。



a. 编程语言:语言本质即规则: 字符集、词法规则、句法规则(条件语句、循环语句等);

桌面应用程序 :拥有图形化用户接口的软件;

服务器应用程序:通过浏览器访问运行;



b. 开发环境:开发程序,不管是桌面应用还是服务器应用,均需要JDK的支持。

c. 应用环境:运行时需要JDK的支持。

d. 部署环境:服务器应用程序需部署运行在服务器应用程序上,服务器本身也是一个Java程序

用Java语言编写的服务器应用程序部署运行时也需要Java语言的支持;

3. 为什么发明Java?

为什么发明了java,换而言之,java有哪些优点呢?



a. 提供一个解释环境

1) 加速开发: Java当初目的是开发适用于智能化电子消费设备上的软件,它是基于C++语言,但做了简化,能加速软件的开发过程;

2) 一次编译到处运行: 跨平台;

3) 多线程:多线程编程的简单性是Java成为流行的服务器端开发语言的主要原因之一

4) 支持动态更新: 软件代码文件的替换即更新

b. 提供一个比较容易的方式编程

1) 更健壮:没有指针、没有内存管理;

2) 纯粹的面向对象的编程:在Java中认为一切均是对象,对象有属性以及改变属性值的方法。通过Java编程围绕

着构建对象的模板、实例化对象、调用对象的方法和属性等来进行。

c. 那么如何实现上面这些呢?

虚拟机JVM提供一个解释环境,让java代码可以运行。

垃圾回收机制让程序员无需在代码中进行内存管理。

代码安全校验保证java代码的安全性。

那么接下来我们就要重点讲述这三个方面。

4. 理解Java虚拟机的特征;

Jvm是什么?简称java 虚拟机(java virtual machine),是用软件来模拟一个虚拟的环境。

我们用java编写的源程序经过编译以后生成字节码文件,Jvm 提供了一个解释运行 java字节码文件的环境,

只要在不同操作系统上安装了jvm后,就能对同一个java程序进行解释运行,这就java的跨平台,一次编译,到处运行。

画图解释(在windows linux solaris中)

画出jvm内部结构图,分析各个部件的功能。

类装载器、运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈)、执行引擎、本地方法接口

jconsole JDK自带的内存监测工具,路径jdk bin目录下jconsole.exe,双击运行

5. 描述垃圾收集的概念;

什么叫垃圾回收:

1) 垃圾:无用对象所占据的内存空间;

垃圾回收:将无用对象所占据内存空间进行回收的过程;



为什么要垃圾回收?

1) 对象创建,需要占用内存空间,在一个程序运行过程中要创建无数个对象,如果对象永久占用内存,那么内存很快会

消费光,倒致后续对象无法创建或者出现内存不足的错误。因此必须采取一定措施及时回收那些无用对象的内存,这

样保证内存可以被重复利用。

C++等程序由程序员显示进行内存释放,这样有可能:

1) 忘记内存释放,倒致无端的内存占用;

2) 释放核心类库占用内存,倒致系统崩溃;

Java中垃圾回收处理:

1) 由虚拟机通过一个系统级的垃圾回收器线程自动完成,不会忘记也不会释放错,系统更加稳定;

Java中垃圾回收处理特点:

1) 由虚拟机通过垃圾回收器线程自动完成;

2) 只有当对象不再被使用,它的内存才有可能被回收;如果虚拟机认为系统不需要额外的内存,即便对象不再使用,内存

也不会回收;

3) 程序无法显示迫使垃圾回收器立即执行垃圾回收,可以通过java.lang.System.gc()/java.lang.Runtime.gc()建议

虚拟机回收对象;

4) 垃圾回收器线程在释放无用对象占用内存之前会先行调用该对象的finalize()方法。该方法是否被调用以及被调用的时间

极其不可靠。不建议重写。

6. 阐述Java平台代码安全实现策略;



Java虚拟机为Java程序提供运行时环境,其中一项重要的任务就是管理类,管理类的加载、连接和初始化;

1) 加载:查找并加载类的二进制文件(class文件),将其置于内存的方法区中,然后在堆区中创建一个java.lang.Class对象,

用来封装类在方法区内的数据结构。

Java虚拟机可以从多种来源加载类的二进制数据,包括:

a. 从本地文件系统中加载.class文件,最常见;

b. 通过网络下载.class文件;

c. 从zip,jar或其他类型的归档文件中提取.class文件;

d. 从一个专有数据库中提取.class文件;

f. 把一个java源文件动态编译为.class文件;

2) 连接:

a. 验证:确保被加载类的正确性(有正确的内部结构,并且与其他类协调一致);

为什么要验证:

Java虚拟机不知道某个特定的.class文件到底是由正常的Java编译器生成的,还是黑客特制的。类的验证能提

高程序的健壮性,确保程序被安全地执行。

类验证内容:

. 代码和jvm规范一致

. 代码不能破坏系统的完整性

. 没有堆栈的上溢和下溢

. 参数类型是正确的

. 类型转换的正确的



b. 准备:为类的静态变量分配内存,并将其初始化为默认值;

c. 解析:把类中的符号引用转换为直接引用(一个指向所调用方法在方法区内的内存位置的指针);

3) 初始化:给类的静态变量赋予正确的初始值;



即时编译器(JIT compiler,just-in-time compiler)是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。

7. 定义类、包、applets和应用程序;

1) Java的工作方式:

源代码: 编写Java源代码文件

|

编译器: 用编译器编译源代码。编译器会检查错误,如果有错就要改正才能产生正确的输出。

|

输出: 编译器会产生字节码。任何支持Java的装置都能够把它转译成可执行的内容。编译后的字节码与平台无关。

|

Java虚拟机: 可以读取与执行字节码。加载指定类,开始执行它的main方法,然后一直运行到main的所有程序代码

结束为止。



2) Java的程序结构:



a. 源文件:

包含Java代码(按java语法规则编写的内容)的文件;

特征:

i. 以java作为后缀;

ii. 可以包含多个类/接口;

iii.名称与类名(只包含一个类/接口)或public修饰的类/接口(包含多个类/接口)同名;

结构:

i. 包的声明语句(可有可无,如有只能有一行,且位于最前面);

ii. import语句(可有可无, 可有多行,紧跟着包的声明语句);

iii.类的声明语句();

b. 类:

Java代码组织的单位, Java代码都是以一个个类形式组织的。用Java语言编写程序其实就是编写一个个类;



一个类里的语句内容用大括号括起来,一个类里带有零至多个方法。



结构:

i. 类的声明语句,例:

public class HelloWorld

ii. 类的内容语句,用大括号括起来:

(1) 属性;

(2) 方法:

c. 方法:

类似于其它语言里的函数或过程。方法里带有零至多行语句。

结构:

i. 方法的声明语句,例:

public static void main(String[] args)



ii. 方法体,用大括号括起来:

(1) 属性;

(2) Java语句;

d. Main方法:



Java虚拟机执行Java程序时,首先执行调用的方法。main方法又叫程序的入口方法或起点方法。不管你的程序有多大,

不管你的程序有多少个类,一定都会有一个main()方法来作为程序的起点。

3) 剖析类:



public class FirstJavaProgram{

public static void main(String[] args) {

System.out.println("Hello Java, I am your fans!");

}

}

public: 公开给其它类存取;

class: 类声明的关键字;

FirstJavaProgram: 类的名称;

void: 方法的返回值;

main: 方法的名称;

String[]: 数组类型;

args: 参数名称;

System.out.println: 打印到标准输出上(默认为命令行)

"Hello Java, I am your fans!": 要输出的字符串内容;

; 每一行语句必须用分号结尾;



8. 编码、编译以及运用Java应用程序;

课堂练习:练习一: 带领大家实践第一个Java程序:FirstJavaProgram.java, 要点:

1. 让大家对Java程序结构有一个总体认识;

2. 掌握编写、编译、运行Java程序的过程;

练习二: 在第一个Java程序基础上加上包声明语句,要点:

1. 让大家知道包的作用;

2. 掌握拥有包的类的编译、运行;

练习三: (可选)在第一个Java程序基础上再定义一个方法,让main方法去调用,要点:

1. 让大家对方法的调用有个认识;

课后练习:问题:

1. (Level 1) Which environment variables need to be set?

J***A_HOME

PATH

CLASSPATH

2. (Level 1) What are the advantages of Java Language?

提供了一个解释环境:

加速开发

只写一次,到处运行

多线程

动态更新

提供了一个更容易开发的方式

更健壮

完全面向对象

Why Java have then?

Java运行在虚拟机上,由虚拟机读取字节代码运行程序。不同操作系统均有对应的虚拟机

所以能够跨平台。虚拟机在读取字节代码的时侯首先进行代码安全检测,所以更安全。虚

拟机通过垃圾回收进制能自动完成内存回收, 避免程序员手动对内存进行的复杂操作,所

以加速了开发。

3.(Level 1) Which JDK tools can be used to compile and

run a java program?

javac compile

java run

4.(Level 1)What are the basic packages in Java.

java.lang

java.awt/javax.swing/java.awt.event

java.applet

java.io

java.net

java.util

5.(Level 1) If all three top-level elements occur in a source

file, they must appear in which order:

A. Imports, package declarations, classes

B. Classes, imports, package declarations

C. package declarations; order for imports and

classes doesn’t matter

D. package declarations, imports, classes

答案:D

作业:

1. (Level 1) Set up your java development environment.

2. (Level 2 ) Learn how to use JDK tools and vi to edit,

compile and run FirstJavaProgram.java with package in it.

package ch01;

public class FirstJavaProgram {

public static void main(String[] args) {

System.out.println("Hello Java, I am your fans!");

}

}

javac -d . FirstJavaProgram.java

java ch01.FirstJavaProgram

3. (Level 2) Compile and run HelloWorld.java which will print

out a line of text with “Hello World”.

package ch01;

public class HelloWorld {

public static void main(String[] args) {

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

}

}

javac -d . HelloWorld.java

java ch01.HelloWorld

4. (Level 3) Modify HelloWorld.java to add a new method

which will be called from main() and print out a line of text

with “Hello World”.



package ch01;

public class HelloWorld {

public static void main(String[] args) {

sayHello();

}

public static void sayHello() {

System.out.println(Hello World!);

}

}

javac -d . HelloWorld.java

java ch01.HelloWorld

第二天:

教学任务:

完成第二章(标识符、关键字和类型)内容的讲解,共23个slide(40-63)。

目标: 1. 标识符、关键字和类型介绍;

2. 如何构建类?

------------------------------------------------------------

第二章: Identifiers, Keywords and Types(40-63)

目标:1. 注释



作用:使部分内容只为程序员可见,不为编译器所编译、虚拟机所执行;

位置:类声明前后、方法声明前后、属性声明前后、方法体中。几乎可以在一个源文件任意位置,但不能在一个关键字字符中插入注释。

类型:1) 单行注释:

//text——从"//"到本行结束的所有字符均作为注释而被编译器忽略

2) 多行注释:

/*text*/——从"/*"到"*/"间的所有字符会被编译器忽略

3) 文档注释:

/** text */——从"/**"到"*/"间的所有字符会被编译器忽略。当这类注释出现在任何声明(如

类的声明、类的成员变量的声明或者类的成员方法的声明)之前时,会作为

JavaDoc文档的内容;

示例:1) //package declaration

package ch01; //允许;

2) package /*package declaration*/ch01; //允许;

3) class /*class declaration*/ FirstJavaProgram { //允许;

...}

4) System.out./*out content to console*/println("Hello Java"); //允许;

5) System.out.print/*out content to console*/ln("Hello Java"); //不允许;

课堂练习:练习一: 带领大家实践一个文档注释:在FirstJavaProgram.java的main方法前面加上文档注释,

内容可以为第一章讲解中类剖析的相关内容。然后实践一下javadoc

javadoc FirstJavaProgram.java

练习二: 在第一个练习的基础上,再写一个有文档注释的类,然后一起提取注释至指定目录

javadoc -d doc -author -version *.java

2. 分号、块和空格

1) 每个语句短语以;结束 ;

2) 代码段以{}结束;

3) 空白处(空格、tab键、新行和回车(几个语句短语连接在一起))是无关紧要的。

详细解释PPT上程序代码中各符号的实际运用;

3. 标识符

类、方法和变量的名字

1) java标识符以字母、_和$开头,不能以数字开头,后跟字母、数字、“_”和“$”的组合;

2) 大小写敏感

3) 没有长度限制。

举例: 合法标识符 非法标识符

try try#

GROUP_7 7GROUP

openDoor open-door

boolean1 boolean

详细解释PPT上程序代码中各符号的实际运用;



4. 关键字

Java语言的关键字是程序代码中的特殊字符。包括:

. 类和接口的声明——class, extends, implements, interface

. 包引入和包声明——import, package

. 数据类型——boolean, byte, char, double, float, int, long, short

. 某些数据类型的可选值——false, true, null

. 流程控制——break, case, continue, default, do, else, for, if, return, switch, while

. 异常处理——catch, finally, throw, throws, try

. 修饰符——abstract, final, native, private, protected, public, static, synchronized, transient, volatile

. 操作符——instanceof

. 创建对象——new

. 引用——this, super

. 方法返回类型——void

Java语言的保留字是指预留的关键字,它们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。

. 所有关键字都是小写;

. friendly, sizeof不是Java语言的关键字,这有别于C++;

. 程序中标识符不能以关键字命名;

5. 基本类型:

程序的基本功能是处理数据

程序用变量来表示数据;

程序中必须先定义变量才能使用;

定义变量是指设定变量的数据类型和变量的名字,定义变量的基本语法为:

数据类型 变量名;

Java语言把数据类型分为基本类型和引用类型。

------------------------------------------------------------

基本类型 数值类型 浮点数类型 float

double

整数类型 byte

short

int

long

字符类型 char

boolean

------------------------------------------------------------

引用类型 引用 类类型

接口类型

数组类型

------------------------------------------------------------

接下来,我们主要关注基本数据类型,关注各种基本数据类型 有什么样的取值范围?占用多少内存空间?

6. boolean类型

位置 boolean类型变量取值

------------------------------------------------------------

Java源程序 只能是true或false

class文件 用int或byte表示boolean

虚拟机中 用整数0来表示false, 有任意一个非零整数表示true

强调,在Java源程序中不允许把整数或null赋给boolean类型的变量,这是有别于其它语言(如c语言)的地方. 例:

boolean isMarried = 0; //编译出错,提示类型不匹配

boolean isMarried = null; //编译出错,提示类型不匹配

7. 文本数据类型——char和String

1) 字符编码

Java语言对文本字符采用Unicode字符编码。由于计算机内存只能存取二进制数据,因此必须为各个字符进行编码。

所谓字符编码,是指用一串二进制数据来表示特定的字符。常见的字符编码包括:

a. ASCII字符编码

ASCII--Amecian Standard Code for Information Interchange(美国信息交换标准代码). 主用于表达现代英语

和其他西欧语言中的字符。它是现今最通用的单字节编码系统,它只用一个字节的7位,一共表示128个字符。

b. ISO-8859-1字符编码

又称为Latin-1, 是国际标准化组织(ISO)为西欧语言中的字符制定的编码,用一个字节(8位)来为字符编码,与

ASCII字符编码兼容。所谓兼容,是指对于相同的字符,它的ASCII字符编码和ISO-8859-1字符编码相同。

c. GB2312字符编码

它包括对简体中文字符的编码,一共收录了7445个字符(6763个汉字+682个其他字符. 它与ASCII字符编码兼容。

d. GBK字符编码

对GB2312字符编码的扩展,收录了21886个字符(21003个字符+其它字符), 它与GB2312字符编码兼容。

e. Unicode字符编码:

由国际Unicode协会编制,收录了全世界所有语言文字中的字符,是一种跨平台的字符编码。

UCS(Universal Character Set)是指采用Unicode字符编码的通用字符集。

Unicode具有两种编码方案:

. 用2个字节(16位)编码,被称为UCS-2, Java语言采用;

. 用4个字节(32位)编码,被称为UCS-4;

f. UTF字符编码

有些操作系统不完全支持16位或32位的Unicode字符编码,UTF(UCS Transformation Format)字符编码能够把

Unicode字符编码转换为操作系统支持的编码,常见的UTF字符编码包括UTF-8, UTF-7和UTF-16.

2) char的几种可能取值

Java语言采用UCS-2字符编码,字符占2个字节。

字符a的二进制数据形式为 0000 0000 0110 0001

十六进制数据形式为 0x0061

十进制数据形式为 97

以下4种赋值方式是等价的:

char c = 'a';

char c = '\u0061'; //设定"a"的十六进制数据的Unicode字符编码

char c = 0x0061; //设定"a"的十六进制数据的Unicode字符编码

char c = 97; //设定"a"的十进制数据的Unicode字符编码

3) 转义字符

Java编程人员在给字符变量赋值时,通常直接从键盘输入特定的字符,而不会使用Unicode字符编码,因为很难记住各

种字符的Unicode字符编码值。

对于有些特殊字符,比如单引号,如不知道它的Unicode字符编码,直接从键盘输入编译错误:

char c = '''; //编码出错

为了解决这个问题,可采用转义字符来表示单引号和其他特殊字符:

char c = '\'';

char c = '\\';

转义字符以反斜杠开头,常用转义字符:

\n 换行符,将光标定位到下一行的开头;

\t 垂直制表符,将光标移到下一个制表符的位置;

\r 回车,将光标定位到当前行的开头,不会移到下一行;

\\ 反斜杠字符

\' 单引号字符

8. 整数类型

byte, short, int和long都是整数类型,并且都是有符号整数。与有符号整数对应的是无符号整数,两者的区别在于

把二进制数转换为十进制整数的方式不一样。

. 有符号整数把二进制数的首位作为符号数,当首位是0时,对应十进制的正整数,当首位是1时,对应十进制的负整

数。对于一个字节的二进制数, 它对应的十进制数的取值范围是-128 - 127。

. 无符号整数把二进制数的所有位转换为正整数。对于一个字节的二进制数, 它对应的十进制数的取值范围是0 - 255。

在Java语言中,为了区分不同进制的数据,八进制数以“0”开头,十六制以“0x”开头。举例:



一个字节的二进制数 八进制数 十六进制数 有符号十进制数 无符号十进制数

-------------------------------------------------------------------------------------------------

0000 0000 0000 0x00 0 0

1111 1111 0377 0xFF -1 255

0111 1111 0177 0x7F 127 127

1000 0000 0200 0x80 -128 128

如果一个整数值在某种整数类型的取值范围内,就可以把它直接赋给这种类型的变量,否则必须进行强制类型的转换。



byte = 13;

如129不在byte类型的取值范围(-128-127)范围内,则必须进行强制类型的转换。

byte b = (byte)129; //变量b的取值为-127.

如果一个整数后面加上后缀——大写"L"或小写"l", 就表示它是一个long类型整数。以下两种赋值是等价的:

long var = 100L; //整数100后面加上大写的后缀"L",表示long型整数;

long var = 100l; //整数100后面加上大写的后缀"l",表示long型整数;

Java语言允许把八进制数(以"0"开头), 十六进制数(以"0x"开头)和十进制数赋给整数类型变量,例如:

int a1 = 012; //012为八进制数,变量a1的十进制取值为10

int a2 = 0x12; //0x12为十六进制数,变量a2的十进制取值为18

int a3 = 12; //12为十进制数,变量a3的十进制取值为12

int a4 = 0xF1; //0xF1为十六制数,变量a4的十进制取值为241

byte b = (byte)0xF1 //0xF1为十六制数,变量b的十进制取值为-15

9. 浮点类型

浮点类型表示有小数部分的数字。Java中有两种浮点类型:

. float: 占4个字节,共32位,称为单精度浮点数;

. double: 占8个字节,共64位,称为双精度浮点数;

float和double类型都遵循IEEE754标准,该标准分别为32位和64位浮点数规定了二进制数据表示形式。

float=1(数字符号)+8(指数,底数为2)+23(尾数)

double=1(数字符号)+11(指数,底数为2)+52(尾数)

在默认情况下,小数及采用十进制科学计数法表示的数字都是double类型,可以把它直接赋值给double类型变量。

double d1 = 1000.1;

double d2 = 1.0001E+3; //采用十进制科学计数法表示的数字,d2实际取值为1000.1

double d3 = 0.0011;

double d4 = 0.11E-2; //采用十进制科学计数法表示的数字,d4实际取值为0.0011

如果把double类型的数据直接赋给float类型变量,有可能会造成精度的丢失,因此必须进行强制类型的转换,否

则会导致编译错误,例如:

float f1 = 1.0 //编译错误,必须进行强制类型转换;

float f2 = 1; //合法,把整数1赋值给f2,f2的取值1.0;

float f3 = (float)1.0; //合法,f3的取值为1.0;

float f4 = (float)1.5E+55; //合法, 1.5E+55超出了float类型的取值范围,

f4的取值为正无穷大

System.out.println(f3); //打印1.0;

System.out.println(f4); //打印Infinity

----------------------------------------------------------------------------------------------------

Float.NaN 非数字

Float.POSITIVE_INFINITY 无穷大

Float.NEGATIVE_INFINITY 负无穷大

float f1 = (float)(0.0/0.0); //f1的取值为Float.NaN

float f2 = (float)(1.0/0.0); //f2的取值为Float.POSITIVE_INFINITY

float f3 = (float)(-1.0/0.0); //f3的取值为Float.NEGATIVE_INFINITY

System.out.println(f1); //打印NaN;

System.out.println(f2); //打印Infinity

System.out.println(f3); //打印-Infinity



Java语言之所以提供以上特殊数字, 是为了提高Java程序的健壮性,并且简化编程。当数字运算出错时,可以用浮

点数取值范围内的特殊数字来表示所产生的结果。否则,如果Java程序在进行数学运算遇到错误时就抛出异常,会影

响程序的健壮性,而且程序中必须提供捕获数学运算异常的代码块,增加了编程工作量。

10. 变量的申明和赋值

程序的基本功能是处理数据

程序用变量来表示数据;

程序中必须先定义变量才能使用;

定义变量是指设定变量的数据类型和变量的名字,定义变量的基本语法为:

数据类型 变量名;

Java语言要求变量遵循先定义,再初始化,然后使用的规则。变量的初始化是指自从变量定义以后,首次给它赋初始

值的过程。例:

int a; //定义变量a

a = 1; //初始化变量a

a++; //使用变量a

int b=a; //定义变量b, 初始化变量b, 使用变量a;

b++; //使用变量b

11. 推荐命名规则

1) 类名以大写字母开头;

2) 接口名以大写字母开头;

3) 方法名以小写字母开头;

4) 变量名以小写字母开头;

5) 常量名全部大写,多个单词以"_"连接;



12. 理解对象

面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的

子系统。面向对象的开发方法将软件系统看成各种对象的集合,接近人的自然思维方式。

对象是对问题领域中事件的抽象。对象具有以下特性:

1) 万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如学生,成绩单、教师、课和教室。

2) 每个对象都是惟一的。正如世界上不存在一模一样的叶子。

3) 对象具有属性和行为。

例如小张,性别女,年龄22,身高1.6m, 体重40kg, 能够学习,唱歌。小张的属性包括姓名、性别、年龄、身高和

体重,行为包括学习、唱歌。

例如一部手机,牌子是诺基亚、价格是2000元,银白色,能够拍照、打电话和收发短信等。这部手机的属性包括品

牌类型type、价格price和颜色color,行为包括拍照takePhoto(),打电话call(),收发短信receiveMessage()和发短

信sendMessage().

4) 对象具有状态。状态是指某个瞬间对象的各个属性的取值。对象的某些行为会改变对象自身的状态,即属性的取值。

例如小张本来体重为40kg,经为减肥后,体重减到45kg.

肥胖状态: 40kg

|

| 减肥行为

|

肥胖状态: 35kg



5) 每个对象都是某个类的实例。小张和小王都属于学生类、中国和美国都属于国家类、中文和英文都属于语言类。

类是具有相同属性和行为的对象的集合。

同一个类的所有实例都有相同属性,但属性取值不一事实上相同,但是它们的状态不一定相同。例如小张和小王都属

于学生类,都有姓名、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。

同一个类的所有实例都有相同行为,意味着它们具有一些相同的功能。

13. 创建类



类是一组具有相同属性和行为对象的模板。面向对象编程的主要任务就是定义对象模型中的各个类。



package sample;

public class Teacher {



/**attributes of a teacher*/

private String name;

private int age;

private double salary;



/** Creates a new instance of Teacher */

public Teacher(String name, int age, double salary) {

this.salary = salary;

this.age = age;

this.name = name;

}

/**operations on properties */

/** get the name of this teacher */

public String getName() { return name; }

/**get the salary of this teacher */

public double getSalary() { return salary; }

/**get the age of teacher teacher */

public int getAge() { return age; }

……

}

代码解析:

1) package sample;

包声明语句,将Java类放到特定的包中,便于类的组织、权限访问和区分名字相同的类。

2) public class Teacher {...}

类的声明语句,类名为Teacher, public修饰符意味着这个类可以被公开访问;

声明类的格式:

class 类名 {

类内容

}

3) private String name;

类的属性(也称为成员变量)的声明语句;Teacher类有一个name属性,字符串类型,private修饰符意味着这个属性

不能被公开访问。

4) public String getName() { return name; }

方法的声明语句和方法体

方法名为getName,不带参数,String表明返回类型为String。public表明这个方法可以被公开访问。getName后紧跟

的大括号为方法体,代表getName的具体实现。

声明方法的格式:

返回值类型 方法名 (参数列表) {

方法体

}

返回值类型是方法的返回数据的类型, 如果返回值类型为void, 表示没有返回值。

方法名是任意合法的标识符;

参数列表可包含零个或多个参数,参数之间以逗号","分开。

方法体每个语句用";"结束;

方法体中使用return语句返回数据或结束本方法的执行;

注:不介绍构造方法。在面向对象章节会提到。



14. 创建实例

public static void main(String[] args) {

Teacher gzhu = new Teacher("George Zhu", 30, 10000);

System.out.println("Teacher: " + gzhu.getName());

System.out.println("\tAge: " + gzhu.getAge());

System.out.println("\tSalary: " + gzhu.getSalary());

}

main()方法是Java应用程序的入口点,每个Java应用程序都是从main()方法开始运行的。作为程序入口的main()方法必

须同时符合以下几个条件:

. 用public static修饰;

. 返回类型为void;

. 方法名为main;

. 参数类型为String[];

包含main方法的类又叫主程序类。

类创建好之后,通过new关键字创建具体对象。它有以下作用:

. 为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值;

. 如实例变量显示初始化,将初始化值赋给实例变量;

. 调用构造方法;

. 返回对象的引用;

注:结合实例,并画内存分配图讲解。

15. 基本类型和引用类型的区别

1) 基本类型代表简单的数据类型,比如整数和字符。

引用类型代表复杂数据类型,引用类型所引用的实例包括操纵这种数据类型的行为。



通过"."运算符,就能访问引用变量所引用的实例的方法.

2) 基本类型Java虚拟机会为其分配数据类型实际占用的内存空间;

引用类型仅是一个指向堆区中某个实例的指针。

例:public class Counter {

int count = 13;

}

Counter counter = new Counter();

counter引用变量-------------> Counter实例

count变量(占4个字节,值为13)

counter引用变量的取值为Counter实例的内存地址。

counter引用变量本身也占一定的内存空间,到底占用多少内存空间取决于Java虚拟机的实现,这对Java程序是透明的。

注:counter引用变量到底位于Java虚拟机的运行时数据区的哪个区?取决于counter变量的作用域,如果

是局部变量,则位于Java栈区;

静态成员变量,则位于方法区;

实例成员变量,则位于堆区;



课堂练习:1. 仿书上示例,写出一学生类,并写一主程序类实例化学生类并调用其方法。



课后练习:问题:

1.(Level 1) Which type of comment is required by Javadoc?

答:文档注释

2.(Level 1) What types are primitive data types?

答:byte

short

int

long

float

double

boolean

char

3.(Level 1) What is the difference between variable declaration and definition?

4.(Level 2) What is the relationship among class, object and reference?

5.(Level 2)Choose the valid identifiers from below (choose all that apply):

A. BigLongStringWithMeaninglessName

B. $int

C. bytes

D. finalist

答:A, B, C, D

6.(Level 2)What is the range of values for a variable of type short?

A. Depends on the underlying hardware

B. 0 through 2^16 -1

C. 0 through 2^32 -1

D. – 2^15 through 2^15 -1

答:D

7.(Level 2)What is the range of values for a variable of type byte?

A. Depends on the underlying hardware

B. 0 through 2^8 -1

C. 0 through 2^16 -1

D. 0 through 2^7 -1

答:D

作业:

1. (Level 1) Learn how to use Jbuilder to write and run simple java programs..

答:不要求;有关IDE开发工具使用介绍放到JDK5.0介绍;

2. (Level 2 )Use JDK/Vi and Jbuilder respectively, compile and run Teacher.java in you handout..

答:

3. (Level 2) Add a new method to increase the teacher’s salary with 5000,then print out the

new salary. In addition, add comments to your codes.

package sample;

public class Teacher {



/**attributes of a teacher*/

private String name;

private int age;

private double salary;



/** Creates a new instance of Teacher */

public Teacher(String name, int age, double salary) {

this.salary = salary;

this.age = age;

this.name = name;

}

/**operations on properties */

/** get the name of this teacher */

public String getName() { return name; }

/**get the salary of this teacher */

public double getSalary() { return salary; }

/**get the age of teacher teacher */

public int getAge() { return age; }

public void incrementSalary() {

salary = salary + 50000;

}

public static void main(String[] args) {

Teacher gzhu = new Teacher("George Zhu", 30, 10000);

System.out.println("Teacher: " + gzhu.getName());

System.out.println("\tAge: " + gzhu.getAge());

System.out.println("\tSalary: " + gzhu.getSalary());

gzhu.incrementSalary();

System.out.println("\tSalary: " + gzhu.getSalary());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: