J2SE基础教程.docx
《J2SE基础教程.docx》由会员分享,可在线阅读,更多相关《J2SE基础教程.docx(122页珍藏版)》请在冰豆网上搜索。
J2SE基础教程
序言
当前的软件开发环境
开发语言
数据库
C#
SQLServer
Java
Oracle
Php
MySql
C/C++
?
…
…
XML简介
XML,英语全称是ExtendedMarkupLanguage,弥补了HTML的不足。
HTML例子:
Thisisatestpage.
Q:
如果标签丢失或出错,HTML会运行吗?
简单XML例子:
ZS
查看XML文件,双击即可。
Q:
如果标签丢失或出错,XML会运行吗?
XML数据库例子:
350303001zs
350303002ls
查看XML两种方式:
(1)双击
(2)选择EXCEL程序
Q:
上面的写法是否支持中文?
第一行增加:
xmlversion="1.0"encoding="GB2312"?
>
软件开发流程简介-Lecture
第1章Java开发前奏
Java是从1995年正式问世,完全面向对象,平台无关性,安全可靠,主要面向Internet的开发工具(B/S)。
其特点:
自动回收垃圾功能,对象和变量的强制类型检查,取消了指针。
Java分成三种版本:
Java标准版(J2SE)、Java微缩版(J2ME)和Java企业版(J2EE),关系图如下:
Java对Internet的影响如同C对系统编程的影响。
||2节
1.1Java虚拟机及Java的跨平台原理
第一个C语言例子
//C:
\turboc2\Hello.c
#include
main()
{
printf("Helloworld\n");
}
执行步骤:
(I)cmd>c:
\turboc2
(II)打开编辑界面:
tcHello.c
(III)编译运行:
Ctrl+F9
(IV)查看结果Alt+F5
练习:
把turboc2.rar解压到C:
\turboc2,然后运行上面的Hello.c
第一个Java例子
前提:
Java开发环境的搭建
(1)安装JDK1.5
(2)配置环境变量
右击我的电脑à属性à高级à环境变量
(A)修改环境变量名path,最前面添加:
C:
\ProgramFiles\Java\jdk1.5.0_04\bin;
备注:
路径前后顺序的重要性:
C:
\WINDOWS\system32\java.exe,
(B)新建环境变量名:
classpath变量值:
C:
\ProgramFiles\Java\jdk1.5.0_04\jre\lib\rt.jar;.;
(C)新建环境变量名:
java_home变量值:
C:
\ProgramFiles\Java\jdk1.5.0_04\
至此,环境配置完毕,现在运行第一个Java程序。
//C:
\Hello.java
classHello
{
publicstaticvoidmain(String[]args)
{
System.out.print("Helloworld\n");
}
}
执行步骤:
(I)cmd>C:
\
(II)javacHello.java
(III)javaHello//其中java就是一个JVM
Q:
下面的配置会产生什么样的后果?
(Q1)(A)步骤中把C:
\ProgramFiles\Java\jdk1.5.0_04\bin;放在路径的最后面
(Q2)(B)步骤中classpath的值后面缺少;.;
练习:
用记事本新建一个Hello.java,内容同上,然后在cmd界面运行。
练习:
用记事本新建一个Sum.java,打印出1+…+100的和,然后在cmd界面运行。
体验:
C、Java命令行开发工具与可视化开发工具
||2节
1.2体验Java的编程过程
初级开发工具:
记事本,EditPlus,UltraEdit等,没有函数联想功能。
//Hello.java
classHello
{
publicstaticvoidmain(String[]args)
{
System.out.print("Helloworld\n");
//System.out.println("Helloworld");
}
}
练习:
Myeclipse的HelloWorld程序和求和程序。
练习:
输出如下图的效果:
1.3有效利用java的文档帮助
两种版本:
HTML,CHM(见压缩包jdk150.chm)
classHello
{
publicstaticvoidmain(String[]args)
{
Stringtest="Helloworld.";
System.out.println(test.substring(2,5));
}
}
练习:
查找String变量test中关于o出现的第一次位置。
1.4JVM(虚拟机)的运行过程
C:
为特定平台编译,产生固定内存偏移量
Java:
可以跨平台,不确定内存布局,由JVM运行时创立è可移植和安全性
1.5垃圾回收器
Java内存中的栈与堆:
一般变量在栈中,如inti=0;
类的实例对象和数组所需要的存储空间在堆上分配,如Hellohello=newHello();
没有引用的对象就是垃圾.用System.gc()回收,如下代码所示:
classHello
{
privateinti=10;
publicstaticvoidmain(String[]args)
{
Hellohello=newHello();
System.out.println(hello.i);
}
}
//运行完后,hello对象就成为垃圾了。
后面章节会详细说明它的内存分布。
垃圾回收不由程序员控制,无规律可循,àjava占内存
||2节
1.6反编译工具介绍JAD
jad–sjavaHello.class
练习:
自己编写一个类,然后通过.class反编译出源代码
第2章Java编程基础
本章案例见MyMath工程:
2.1Java基本语法格式
2.1.1Java基本语法格式概述
Java中的所有程序代码都必须存在于一个类中,(注意全局变量的写法也是在一个类中,与C不同)。
严格区别大小写。
(优点:
类Hello与对象hello的关系)
自由格式:
一条语句写成若干行,一行写若干语句。
练习:
根据现成案例改写成自由格式(不推荐)
2.1.2Java程序的注释
单行注释
多行注释
文档注释
总结:
可读性第一,效率第二。
注释一般占代码总量的20%-50%(见案例)
2.1.3Java中的标识符与关键字
不能以数字开头,不能是Java中的关键字(public,for等),可由任意顺序的大小写字母、数字、下划线和美元符号。
(见案例)
2.1.4Java中的常量
Java中的单个字符占两个字节,Unicode
备注:
转义字符
\n换行
\t制表符
\\斜杠
练习输出软件标题:
福建省东方锐智\2009版'通用进销存'系统(见案例)
练习:
eclipse-SDK-3.2.2-win32.zip运行上面的例子
||2节
2.2变量及变量的作用域
2.2.1Java的变量类型
练习:
定义以上所有类型的变量
2.2.2注意变量的有效取值范围
类型名
大小/位
取值范围
byte
8
-128~127
short
16
-32768~32767
int
32
-2147483648~2147483647
long
64
-9223372036854775808~9223372036854775807
float
32
1.4E-45~3.4E+38,-1.4E-45~-3.4E+38
double
64
4.9E-324~1.7E+308,-4.9E-324~-1.7E+308
2.2.3基本数据类型之间的转换
1自动类型转换(隐式类型转换)
两种不同的数据相操作,会自动往上面一级转换
(见案例的publicstaticfloatsquare(inti,intj)、或”sum=”+sum)
2强制类型转换(显示类型转换)-数据丢失,不推荐
byteb=(byte)257
2.3函数
2.3.1函数
没有用函数的代码:
publicclassFunc1{
publicstaticvoidmain(String[]args){
for(inti=0;i<3;i++)
{
for(intj=0;j<5;j++)
{
System.out.print("*");
}
System.out.println();
}
System.out.println();
for(inti=0;i<2;i++)
{
for(intj=0;j<4;j++)
{
System.out.print("*");
}
System.out.println();
}
System.out.println();
for(inti=0;i<6;i++)
{
for(intj=0;j<10;j++)
{
System.out.print("*");
}
System.out.println();
}
}
}
有用函数的代码:
publicclassFunc1{
publicstaticvoidmain(String[]args){
//inti=3,j=5;
drawRectangle(i,j);//System.out.println(i+”:
”+j);形参传递
drawRectangle(2,4);
drawRectangle(6,10);
}
publicstaticvoiddrawRectangle(intx,inty)
{
for(inti=0;i{
for(intj=0;j{
System.out.print("*");
}
System.out.println();
}
System.out.println();
}
}
练习上面的例子提高代码的复用性
2.3.2函数的参数传递过程
2.4Java中的运算符
2.4.1算术运算符
练习修改案例:
publicstaticintroom(inti,intj)//共i个人,每个房间有j个床位,需要多少房间
||2节
练习:
产生随机小数(0,1),(参见JDK帮助索引Random)
练习:
产生随机整数[0,5]
练习:
产生随机整数[1,60]
练习:
产生随机整数[61,120]
练习:
产生随机整数函数genearteRnd(inti,intj),并调用之
练习修改案例:
publicstaticintrandom(inti,intj)//产生i到j之间的随机数
2.4.2赋值运算符
见案例
2.4.3比较运算符
见案例
2.4.4逻辑运算符
见案例
||2节
2.4.5位运算符
见案例
2.4.6运算符的优先级
见案例
2.5程序的流程控制
2.5.1顺序结构
见案例
2.5.2if条件结构
见案例
2.5.3switch选择结构
练习:
改写案例为switch结构
2.5.4循环结构
练习改写案例:
publicstaticintmultiple(inti,intj),要求效果如下:
return(i*(i+1)*(i+2)…*j)
2.5.5break与continue语句
练习改写案例:
publicstaticintmultiple(inti,intj),其中i<0andj>0要求效果如下:
(1)当i遇到0时,跳过,继续
(2)当i遇到0时,跳出循环
2.6数组
2.6.1数组的基本概念
intx[]=newint[100];
以下是数组在内存的分布结构,与对象是一样的。
练习改写案例:
publicstaticvoidprintArr(inti,intj)要求把i,j放在一个整型数组,并把它输出
||2节
2.6.2数组的静态初始化
练习改写案例:
publicstaticvoidprintArr(inti,intj)
要求把i,j替换x数组的后面两个,并倒序输出
2.6.3多维数组
不常用
2.6.4数组排序
练习改写案例:
publicstaticvoidprintArr(inti,intj)
要求把i,j替换x数组的后面两个,并从低到高排序
以下是参考答案:
方法1:
采用数据结构与算法的排序法:
publicclassTest{
publicstaticvoidmain(String[]args){
inta[]=newint[]{6,4,1,2,3,5};
inttemp;
intindexSeq;
inti,j;
for(i=0;i<=a.length-2;i++)
{
for(indexSeq=i,j=i+1;j<=a.length-1;j++)
{
if(a[j]{indexSeq=j;
}
}
temp=a[indexSeq];
a[indexSeq]=a[i];
a[i]=temp;
}//外部for结束
for(intk=0;kSystem.out.print(a[k]);
}
}
方法2:
Java自带的排序方法:
importjava.util.*;
publicclassTest{
publicstaticvoidmain(String[]args){
intia[]=newint[]{1,2,4,8,3};
Arrays.sort(ia);
for(inti=0;i{
System.out.println(ia[i]);
}
}
}
第3章面向对象技术(上)
以下各章节内容见项目C/S版JXC:
需求分析图:
数据库设计-MySQL:
练习:
安装并配置MySQL,密码设置为123
usetest;
droptableaccounts;
droptablebooks;
Createtableaccounts(usernamevarchar(20)primarykey,userpasswordvarchar(20),dttimestamp);
Createtablebooks(bookisbnvarchar(20)primarykey,bookcountint,discountfloat(3,1));
insertintoaccountsvalues('zbc','123',sysdate());
commit;
select*fromaccounts;
select*frombooks;
数据库设计-Oracle:
练习:
安装并配置Oracle,帐号密码设置为Scott/tiger
droptableaccounts;
droptablebooks;
Createtableaccounts(usernamevarchar(20)primarykey,userpasswordvarchar(20),dttimestamp);
Createtablebooks(bookisbnvarchar(20)primarykey,bookcountint,discountnumber(3,1));
insertintoaccountsvalues('zbc','123',sysdate);
commit;
select*fromaccounts;
select*frombooks;
练习:
运行C/S进销存并互相访问。
3.1面向对象的概念
见案例(属性、方法、封装、继承、函数重载)
||2节
3.2类与对象
14个文件之间的关系图。
Hello.javaàA.java(publicvoidfunc1())
è
ProcessCenter.javaàAccounts.java(四个方法)//增删改查与四个方法的关系。
è
函数内的变量与属性的区别(初值)
è
数据库的字段与属性的关系(可选类属性,直接用方法传递)
成员变量类型的初始值
成员变量类型/属性
初始值
byte
0
short
0
int
0
long
0L
float
0.0F
double
0.0D
char
‘\u0000’
boolean
False
Allreferencetype
Null
成员函数==方法
||2节
3.2.1对象的比较
(1)intivsintj
(2)StringusernamevsStringspecialuser
(3)同上(newString)
见案例
3.2.2匿名对象
newA().func1vsAa=newA();a.func1();//a.fun2();a.func3();
见案例
3.3构造函数
newA()VSAa=newA();
ènewLogin()
见案例
练习:
3.4this引用句柄
this:
顾名思义,它在函数内部就是这个函数所属的对象的引用变量。
见案例
3.5与垃圾回收有关的知识
自动与手动(增加系统负担)
3.6函数的参数传递
3.6.1基本数据类型的参数传递(P7)
基本类型的变量作为实参传递,并不能改变这个变量的值。
见2.3节的形参传递
3.6.2引用数据类型的参数传递
对象的引用变量并不是对象本身,它们只是对象的句柄。
能改变其传递的值
Client传递MessageàProcessCenterà打印
见案例
练习:
||2节
3.7Static关键字
可直接调用,或实例对象后再用。
简述Static的内存结构。
与非Static的一般对象的区别。
严格来说static的使用破坏了类的封装,但是用在工具类里面还是比较方便的,一般用做库函数,如System、Math等。
常见应用:
统计在线人数
常见的数据库操作,如books.add等,一般不用Static,会引发并发问题。
//Statistics.java
publicclassStatistics{
staticintpeopleOnLine=0;
}
//Client.java
publicclassClient{
publicstaticvoidmain(String[]args){
//while(true)
System.out.println(Statistics.peopleOnLine++);
}
}
3.8内部类
在一个类内部定义,这就是嵌套类。
也叫内部类、内置类。
publicclassOut{
//内部类对外不可访问,通过它的父类才可以调用
classIn{
floatPAI=3.14f;
}
publicvoidprintPai(){
System.out.println(newIn().PAI);
}
publicstaticvoidmain(Stringargs[]){
Outout=newOut();
out.printPai();
}
}
3.9使用Java的文档注释
javadocàHTML文档
javadocAccounts.java自动在当前目录生成相关的HTML
见案例
第4章面向对象技术(下)
4.1类的继承
继承的使用
//Person.java
publicclassPerson{
Stringname;
Stringsex;
publicvoidaddBonus(){
//插入数据库
System.out.println("每人加一千");
}
}
//Cashier.java
publicclassCashierextendsPerson{
StringaccountCertificateID;
publicstaticvoidmain(Stringargs[]){
newCashier().addBonus();
}
}
//QualityChecker.java(StringqualityCertificateID)
//Login.java中的extendsJFrame
覆盖父类的方法-override
覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
注意与函数重载的区别--3.1
见案例
练习:
重写类
final关键字
在JAVA中声明类、属性和方法时,可使用关键字final来修饰。
final标记的类不能被继承
final标记的方法不能被覆盖
final标记的变量,即成为常量,只能赋值一次。
注意区别:
finally是用来抛出异常的关键字。
4.2抽象类与接口
4.2.1抽象类
Java中可以定义一不含方法体的方法,它的方法体的实现交给子类根据自己的情况去实现。
这样的方法就是抽象方法。
包含抽象方法的类就叫抽象类。
抽象方法必须用abstract修饰符来定义。
任何带有抽象方法的类都必须声明为抽象类。
1、抽象类不能被实例化,即不能用new
2、抽象类的子类必须覆盖所有的抽象方法后才能被实例化。
否则这个子类还是抽象类。
含有抽象方法的类肯定是抽象类,抽象类中的某个方法不一定是抽象的。
练习:
创建一个抽象类,并继承
4.2.2接口
如果一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义。
即接口。