Java面向对象教程.docx

上传人:b****9 文档编号:23383498 上传时间:2023-05-16 格式:DOCX 页数:18 大小:23.83KB
下载 相关 举报
Java面向对象教程.docx_第1页
第1页 / 共18页
Java面向对象教程.docx_第2页
第2页 / 共18页
Java面向对象教程.docx_第3页
第3页 / 共18页
Java面向对象教程.docx_第4页
第4页 / 共18页
Java面向对象教程.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Java面向对象教程.docx

《Java面向对象教程.docx》由会员分享,可在线阅读,更多相关《Java面向对象教程.docx(18页珍藏版)》请在冰豆网上搜索。

Java面向对象教程.docx

Java面向对象教程

Java面向对象教程

第1章变量的生命周期、作用域和参数传递

1.1静态变量、静态方法与实例变量

通过static修饰符来修饰类的静态变量、静态方法、实例变量和代码块。

用static修饰的成员变量表示静态变量,可以直接通过类名来访问。

用static修饰的成员方法表示静态方法,可以直接通过类名来访问。

用static修饰的程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。

被static所修饰的成员变量和成员方法表明归某个类所有,它不依赖于类的特定实例,被类的所有实例共享。

只要这个类被加载,Java虚拟机就能根据类名在运行时的方法区内定位到它们。

1.1.1静态变量

类的成员变量有两种:

一种是被static修饰的变量,叫类变量或静态变量;另一种是没有被static修饰的变量,叫实例变量。

静态变量和实例变量的区别如下:

静态变量在内存中只有一个拷贝,运行时Java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。

可以直接通过类名访问静态变量。

对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。

Java语言不支持不属于任何类的全局变量,静态变量提供了这一功能,它有如下两个作用:

能被类的所有实例共享,可作为实例之间进行交流的共享数据。

如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间。

1.1.2静态方法

1.1.3静态方法main

1.1.4静态代码块

1.1.5静态变量和实例变量的生命周期

静态变量和实例变量。

两者的区别在于:

类的静态变量在内存中只有一个,Java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。

静态变量可以直接通过类名被访问。

静态变量的生命周期取决于类的生命周期,当加载类的时候,静态变量被创建并分配内存,当卸载类的时候,静态变量被销毁并撤销所占用的内存。

类的每个实例都有相应的实例变量。

每创建一个类的实例,Java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中。

实例变量的生命周期取决于实例的生命周期,当创建实例的时候,实例变量被创建并分配内存,当销毁实例的时候,实例变量被销毁所占内存。

1.2局部变量的生命周期及作用域

当Java虚拟机调用一个方法时,会为这个方法中的局部变量分配内存。

当Java虚拟机结束调用一个方法时,会结束这个方法中局部变量的生命周期。

1.2.1将局部变量的作用域最小化

为了将局部变量的作用域最小化,应该遵守以下规则:

在需要用到某局部变量的时候,才定义它。

对于以上的例子,只需要在if代码块中定义var变量即可。

使方法小而集中。

如果一个方法包含多种操作,尽可能把这个方法分解为多个小方法,每个方法负责一项操作。

这些小方法在Java源文件中可集中放在一起。

方法变小了,局部变量的作用域也就自然变小了。

1.3成员变量和局部变量同名

1.3.1this引用

1.3.2再谈变量的命名规则

很多所编写的程序会很长,为了降低程序出错的可能性,大家在定义变量的时候,尽可能不要使用同名的变量名。

而且一定要遵守变量的命名规则:

变量若只有一个单词,全部用小写字母。

变量若由多个单词组成,第一个单词全部用小写字母,其余单词的首字母大写。

变量名不能与Java中的关键字同名。

变量名尽可能做到“见名知意”。

1.4参数传递

参数的传递主要有两种方式:

一个是传值,另一个是传递地址。

1.4.1对象的参数传递过程

如果方法A调用方法B,那么称方法A是方法B的调用者。

如果方法B的参数是基本数据类型,那么方法A向方法B传递参数的值(传值)。

如果方法B的参数是对象或数组,那么方法A向方法B传递对象或数组的引用(传递地址)。

1.5final变量

1.5.1基本数据类型的final特性

final变量具有以下特征:

final修饰符可以修饰静态变量、实例变量、局部变量,分别表示静态常量、实例常量、局部常量。

在前面曾经提到类的成员变量可以不必显示初使化,但是这不适用于fianl类型的成员变量。

final类型变量都必须显式初使化,否则会导致编译错误。

final变量只能赋值一次。

1.5.2final对象

第2章常用系统类、包和访问控制符

2.1常用系统类

2.1.1Object类

Object类是所有Java类的最终祖先,如果一个类在声明时没有包含extends(继承)关键字,那么这个类直接继承Object类。

所有Java类都继承了Object类的方法,包括wait()、notify()、equals()和toString()等。

Object类有以下主要成员方法:

equals(Objectobj):

比较两个对象是否相等。

仅当被比较的两个引用变量指向同一对象时,equals()方法才返回true。

许多Java类都覆盖了这个方法。

toString():

返回当前对象的字符串表示,许多类,如String、StringBuffer和包装类都覆盖了toString()方法,返回具有实际意义的内容。

具体用法见String一章。

finalize():

对于一个已经不被任何引用变量引用的对象,当垃圾回收器准备回收该对象所占用的内存时,将自动调用该对象的finalize()方法。

2.1.2Random类

Java.util.Random类提供了一系列用于生成随机数的方法。

nextInt():

返回下一个int类型的随机数,随机数的值大于或等于0。

nextInt(intn):

返回下一个int类型的随机数,随机数的值大于或等于0,并且小于参数n。

nextLong():

返回下一个long类型的随机数,随机数的值位于long类型的取值范围内。

nextFloat():

返回下一个flaot类型的随机数,随机数的值大于或等于0,并且小于1.0。

newxtDouble():

返回下一个double类型的随机数,随机数的值大于或等于0,并且小于1.0。

nextBoolean():

返回下一个boolean类型的随机数,随机数的值为true或false。

/**

*Random类生成随机数

*/

//引入Random类库

importjava.util.Random;

publicclassTestRandom{

publicstaticvoidmain(String[]args){

Randomr=newRandom();

//生成10个int类型的随机数,取值在0--100之间

System.out.println("0--100之间的10个int类型的随机数:

");

for(inti=0;i<10;i++){

System.out.print(r.nextInt(100)+"");

}

System.out.println("\n");

//生成3个long类型的随机数

System.out.println("3个long类型的随机数:

");

for(inti=0;i<3;i++){

System.out.print(r.nextLong()+"\t");

}

System.out.println("\n");

//生成3个double类型的随机数,取值在0.0--100.0之间

System.out.println("0.0--100.0之间的3个double类型的随机数:

");

for(inti=0;i<3;i++){

System.out.print(r.nextDouble()*100+"\t");

}

System.out.println("\n");

}

}

效果预览0--100之间的10个int类型的随机数:

29698649711099963864

3个long类型的随机数:

-70568270860716178865904022970794544264492954971891037614

0.0--100.0之间的3个double类型的随机数:

95.0190010975435454.7927775541951516.40881203308323

2.1.3Math类

Java.lang.Math类提供了许多用于数学运算的静态方法,包括指数运算、对数运算、平方根运算和三角运算等。

Math类还有两个静态常量:

E(自然对数)和PI(圆周率)。

Math类是final类型的,因此不能有子类。

另外,Math类的构造方法是private类型的,因此Math类不能够被实例化。

Math类的主要方法包括以下几种:

abs():

返回绝对值。

ceil():

返回大于或等于参数的最小整数。

floor():

返回小于或等于参数的最大整数。

max():

返回两个参数的较大值。

Min():

返回两个参数的较小值。

random():

返回0.0和1.0之间的double类型的随机数,包括0.0,但不包括1.0。

round():

返回四舍五入的整数值。

sin():

正弦函数。

cos():

余弦函数。

tan():

正切函数。

exp():

返回自然对数的幂。

sqrt():

平方根函数。

pow():

幂运算。

Java源代码(example14.2)

/**

*Math类中的数学运算方法

*/

publicclassTestMath{

publicstaticvoidmain(String[]args){

//返回绝对值

System.out.println("-12的绝对值:

"+Math.abs(-12));

//返回大于或等于参数的最小整数

System.out.println("大于或等于3.3的最小整数:

"+Math.ceil(3.3));

System.out.println("大于或等于-3.3的最小整数:

"+Math.ceil(-3.3));

//返回小于或等于参数的最小整数

System.out.println("小于或等于3.3的最小整数:

"+Math.floor(3.3));

System.out.println("小于或等于-3.3的最小整数:

"+Math.floor(-3.3));

//返回四舍五入的整数值

System.out.println("3.3四舍五入的整数值"+Math.round(3.3));

System.out.println("-3.3四舍五入的整数值"+Math.round(-3.3));

//返回两个参数的较大或较小值

System.out.println("5和9的较大值:

"+Math.max(5,9));

System.out.println("5和9的较小值:

"+Math.min(5,9));

//返回自然对数E和圆周率PI的值

System.out.println("自然对数E的值:

"+Math.E);

System.out.println("圆周率PI的值:

"+Math.PI);

}

}

效果预览-12的绝对值:

12

大于或等于3.3的最小整数:

4.0

大于或等于-3.3的最小整数:

-3.0

小于或等于3.3的最小整数:

3.0

小于或等于-3.3的最小整数:

-4.0

3.3四舍五入的整数值3

-3.3四舍五入的整数值-3

5和9的较大值:

9

5和9的较小值:

5

自然对数E的值:

2.718281828459045

圆周率PI的值:

3.141592653589793

=--=--对于Math类的round()方法,若参数为double类型,则返回long类型,若参数为float类型,则返回int类型,而ceil()和floor()方法的参数和返回类型都是double。

2.1.4日期时间类

Java语言提供了以下3个类来处理日期时间:

Java.util.Date:

包装了一个long类型数据,表示与GMT(格林尼治标准时间)的1970年1月1日00:

00:

00这一刻所相距的毫秒数。

Java.text.DateFormat:

对日期进行格式化。

Java.util.Calendar:

可以灵活地设置或读取日期中的年、月、日、时、分和秒等信息。

Java源代码(example14.3)

/**

*Date类的使用

*/

//引入Date类库

importjava.util.Date;

publicclassTestDate{

publicstaticvoidmain(String[]args){

//创建一个代表当前日期和时间的Date对象

Datedate=newDate();

//getTime()方法返回Date对象包含的毫秒数

System.out.println(date.getTime());

System.out.println(date);

}

}

效果预览1225697482000

MonNov0315:

31:

22CST2008

DataFormat类

Java源代码(example14.4)

/**

*DateFromat类的使用

*/

//引入Date和DateFormat类库

importjava.util.*;

importjava.text.*;

publicclassTestDateFormat{

publicstaticvoidmain(String[]args){

Datedate=newDate();

//设定日期格式

SimpleDateFormatf=newSimpleDateFormat("yyyy-MMMM-dd-EEEE");

System.out.println(f.format(date));

//设定日期格式

f=newSimpleDateFormat("yy/MM/ddhh:

mm:

ss");

System.out.println(f.format(date));

}

}

效果预览2008-十一月-03-星期一

08/11/0303:

32:

06

解释字符串“yyyy-MMMM-dd-EEEE”决定了日期的格式。

Yyyy表示4位长度的年,MMMM表示月,dd表示日,EEEE表示星期。

“yy/MM/ddhh:

mm:

ss”表示另一种日期格式,yy表示2位长度的年,MM表示2位长度的月,hh、mm和ss分别表示时、分和秒。

说明下例中的TestDateParser类有一个parseDate()方法,它利用DateFormat类把字符串解析为Date对象。

Java源代码(example14.5)

/**

*DateFormat类的parse(Stringtest)方法的使用

*/

importjava.util.*;

importjava.text.*;

publicclassTestDateParser{

publicstaticDateparseDate(Stringtext,Stringformat){

//抛出异常

try{

//解析字符串

returnnewSimpleDateFormat(format).parse(text);

}catch(ParseExceptione){

thrownewRuntimeException(e.getMessage());

}

}

publicstaticvoidmain(String[]args){

//定义日期显示格式

Datedate=parseDate("10-30-2008","MM-dd-yyyy");

System.out.println(date);

date=parseDate("2008/10/3011:

49:

50","yyyy/MM/ddhh:

mm:

ss");

System.out.println(date);

}

}

效果预览ThuOct3000:

00:

00CST2008

ThuOct3011:

49:

50CST2008

解释程序中的try{}catch(){}为异常处理语句。

异常处理将在后面的章节中详解。

DateFormat有一个静态方法:

getDateTimeInstance(intdateStyle,inttimeStyle)。

该方法能返回表示标准格式的DateFormat对象,参数dateStyle设定日期风格,参数timeStyle设定时间风格,这两个参数的可选值都包括:

DateFromat.SHORT、DateFormat.MEDIUM、DateFormat.LONG和DateFormat.FULL。

说明下例中TestGetDateTimeInstance类演示了getDateTimeInstance()的用法。

Java源代码(example14.6)

/**

*DateFormat类中方法getDateTimeInstance()的使用

*/

importjava.util.*;

importjava.text.*;

publicclassTestGetDateTimeInstance{

publicstaticvoidmain(String[]args){

Datedate=newDate();

//设定不同的日期、时间风格

DateFormatshortDateFormat=

DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT);

DateFormatmidiumDateFormat=

DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);

DateFormatlongDateFormat=

DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);

DateFormatfullDateFormat=

DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);

System.out.println(shortDateFormat.format(date));

System.out.println(midiumDateFormat.format(date));

System.out.println(longDateFormat.format(date));

System.out.println(fullDateFormat.format(date));

}

}

效果预览08-11-3下午3:

34

2008-11-315:

34:

18

2008年11月3日下午03时34分18秒

2008年11月3日星期一下午03时34分18秒CST

Calendar类

Java.util.Calendar类的set()和get()方法可用来设置和读取日期的特定部分,比如年、月、日、时、分和秒等。

Calendar类是抽象类,不能实例化,它有一个具体的子类,即java.util.GregorianCalendar。

GregorianCalendar采用梅林尼治标准时间。

GregorianCalendar类的add()方法可用来在日期的特定部分加上一些值。

2.1.5System类

System系统类是一个独特的类,它是一个final类,所有的方法都是用类变量调用的,换句话说,没有人可以实例化一个System类。

System类主要提供了标准输入、输出以及一些系统环境信息

标准输入、输出

publicstaticfinalInputStreamin-----标准输入。

这个属性是InputStream类的一个对象,关于InputStream类和下面的PrintStream类我们在java.io包中一并介绍,这些类都是关于输入、输出方面的,它们都有各自的属性和方法,我们用过的println()和print()就是printStream类的方法。

publicstaticfinalPrintStreamout------标准输出。

publicstaticfinalPrintStreamerr------标准错误输出。

这些输入、输出属性可以根据其所使用的参数来自动地转换输出格式。

系统环境信息

System类提供了一个方法用来返回系统环境信息:

publicstaticPropertiesgetProperties(argument);

Java虚拟机维护了一系列环境信息,它们都是以“键名/值”对的形式出现的,一旦java虚拟机启动之后,系统就自动将这些变量初始化,其中包含了与运行环境相关的很多信息,具体内容见表14.1。

键名含义

file.separator文件目录分隔符(通常是/)

java.class.pathClasspath

java.class.version类版本

java.homeJava的安装主目录

java.vendor厂商定义信息

java.vendor.url厂商url

java.version厂商版本

os.arch操作系统结构

os.name操作系统名称

os.version操作系统版本

path.separator路径分隔符

user.dir用户当前工作目录

user.home用户主目录

user.name用户名称

表14.1虚拟机的环境变量

另外,System类提供的与系统环境信息相关的方法还有:

publicstaticStringsetProperty(Stringkey,Stringvalue):

设置系统变量的值,key为键名,value为键值。

publicstaticPropertiesgetProperites():

返回所有的系统环境信息。

其它有用用方法

publicstaticlongcurrentTimeMillis():

返回系统时间,单位毫秒。

publicstaticvoidexit(intstatus):

在用户和程序还未执行完之前,强制关闭Java虚拟机,并把状态信息status传递给操作系统,status非零时,表示非正常退出。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1