Java笔记之面向对象基础(5)_第1页
Java笔记之面向对象基础(5)_第2页
Java笔记之面向对象基础(5)_第3页
Java笔记之面向对象基础(5)_第4页
Java笔记之面向对象基础(5)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java中static的使用与包装类-static变量和方法的声明及使用首先回顾一下前面的一个知识点:对于java z内存分为栈内存(存储对象的名字堆内存(存储对象的具体内容,如属性1全局代码 区(保存所有方法1现在提出新的要求,要表示一个属性,这个属 性是所有对象都具有的,这就要用到static属性。在类中写的一个属性,如果使用static声明,则表示此属性为公有属 性,即所有对象都可以访问此属性。下面用一段代码来说明。为了说明方便,属性暂不封装,但是要注意,在实际开发中,所有的属性都是要封装的。class personstatic string code;string name;strin

2、g shout()return"编码:"+code+",姓名:h + name;public class odemo05public static void main(string args)pers on pl=new person();pers on p2=new pers on();pl.code=n110n;=m 小明:p2.code=h120h;p2.n ame 二”小丽:system.out.println(pl.shouto);system.out.println(p2.shout(); 这段代码似乎与我们前面写过的许多代码没什么区别,

3、只是在声明code变量时前面多了一个statico这就是static声明变量的方式。卜面我们来看一下执行结果:c: jauatestjauaobject>jauac odeno05 jauac:jauatestjauaobject>jaua odeno05编码:120,姓名:/卜明编码:120;姓名:/卜丽c: jauatestjauasobject>可以发现对象pl和p2的code属性居然相同,可是我们在设置时两者是不同的。这就是静态变量属性的特点。在内存中除了堆栈和全 局代码区外,还有一块区域叫做全局数据区,专门用于存放static类型的属性。声明static属性后,此属

4、性对所有对象共享。对于static类型的属性,如果需要修改,最好是通过类名称修改。这里我们对上面的代码做一些修改来说明这一问题:class personprivate static string code;string name;string shout()return*1 编码:,+code+,1 ,姓名:h + name;static void setcode(string c)code=c;public class odemo05public static void main (string args)person.setcode("110h);pers on pl=new p

5、erson();person p2=new person();="小明:p2.n ame 二”小丽";system.out.pri ntln(pl.shout();system.out.pri ntln (p2.shout();从红字部分可以看出,我把code属性定义成了私有属性,然后用person类的setcode方法去为这个静态属性赋值,赋值过程没有涉及到任何对象,赋值后所有对象的code属性将都是同样的值。运行结果如下:c: jauatestc: jauatest编码110,姓名:丿 编确:110,妊玄:/c: jauatest jauaobject&g

6、t;jauac odemo05.jauabject>jaua odemo05、明'丽bject>.这里需要注意的一点是在setcode方法中,不能使用"this.code二code"作为赋值语句。因为static属于所有对象共享的属性,而this只能表示当前对象,这样作用范围不匹配,程序 会报错。所以在"static"方法中不要出现this。对上面说明的扩展:静态方法不能调用非静态变量,即非静态变量不 能够出现在静态方法中。不过反之是可以的。static代码块的使用代码块是java中的一个概念。在java中有四种代码块,分别是: 普通

7、代码块(写在一个方法之中的语句块) 构造块(直接写在类中的语句块)静态块(直接写在类中,通过static声明的语句块) 同步代码块(在学习多线程的时候会见到)#1.普通代码块首先用一个例子来介绍普通代码块,看下面代码:public class odemo05public static void main(string args)int i=0;int i = 10;system.out.println(i);很显然在这段代码中变量i被重复定义了 ,如果不在第一次定义i时 加上括号,那么程序肯定会报错。加上括号,括号里面的内容就形成 了一个普通代码块,它里面的变量定义只在代码块内部有效。可想而

8、知,最后程序输出的结果是10而不是0.#2.构造块疋兀伺例子:class pers onsystem.outprintlnchello world!");pers on()system.out.println("person 构造方法。”);public class odemo05public static void main (string args)new person();代码中的红色部分就是一个构造块。它不在构造方法内部,而且从下面的运行结果可以看岀,构造块优先于构造方法执行。:jauatestjauaxobject>jauac odeno05.jaua:ja

9、uatestjauaxobject>jaua odeno05ello world?euson构造方法。:jauatestjauaxobject>.#3.静态块首先我们把上面的代码做一些修改:class personstaticsystem.out.println("静态块 j;system.outprintlnchello world!*1);person()system.out.pnntln(nperson 构造方法。n);public class odemo05public static void main (string args)new person();可以看到

10、我在person类中又加入了一个静态块(注意静态块的书写格式),下面是执行结果:c: jauatestjavaxobject >jauac odeno05.jauac: javatestjavaobject>jaua odeno05 静态块hello world?person构造方法。c: jauatestjauaobject>从结果中我们得到结论:静态块是优先于构造块与构造方法执行的。 静态块的作用是为静态属性初始化。下面我们还要进一步硏究这个问题,把上面的代码在进行一些修改: class pers onstaticsystem, out. printing'静态块

11、”);system.out.println(hhello world!11);pers on()system.out.printlnc'person 构造方法。n);public class odemo05public static void main(string args)new person();new person(); 从红字部分可以看出,我把调用person类的语句复制了一次,现在 我们看一下运行结果c: javatestjauaobject>javac odemo05.jauac: jauatestjauaobject>java odemo05 铮态块lell

12、o world?person构造方法。lello world?person构造方法。我们发现,在多次执行person语句时,静态块只执行了一次,而构 造块和构造方法执行多次。这也是静态块的一大特点。三理解main方法有了这些准备知识,我们就来解决一个前面遗留的问题。我们前面每 段代码都有 main 方法。格式为"public static void main(string arg)”可是我们从没有对这一格式作出任何解释。这里就来处理一 下:l.public :表示此方法是公共的可被外部所访问。(main方法必须被外部所看见)2.static :表示此方法为static方法,可被类名直

13、接调用3.void :表示此方法无返4.main :系统规定的方法名称5.string args接受运行时参数这里就string args重点解释一下。首先观察,其实args是一个string类型的数组。下面我们用一段代码来看看这个数组里有什么: public class odemo05public static void main (string args)for (int i=0;i<argsength;i + + )system.out.println(argsi);然后看一下运行结果:k: jauatest jauaxobject>jauac odeno05 . jauac

14、: jauatestjauaobject>java odeno05 f irst second tbird first second third可以看到与往常不同的是我在执行乂 class文件时后面加上了三个参 数,而从显示结果来看正是这三个参数传入了 args数组中。四包装类通过上面这一知识,我们想实现一些代码功能。比如说编写一个 person类,类中的内容由程序运行时输入,person里面包括一个姓 名和一个年龄。我们对上面要求做f 简单的分析:姓名是string类型的,年龄是 int类型的。我们可以用args数组接收输入的姓名和年龄数据。而我 们看到args数组是一个string类

15、型的数组。那么问题变成了我们需 要找一种方法,将string类型数据变为int类型。这就是包装类。在java中有一种思想:一切皆对象。而我们知道数据类型中占多数 的基本数据类型并不符合对象的特点。所以java提供了对八种基本 数据类型的包装类。列表如下:类型包装类intintegercharcharacterfloatfloatdoubledoublebytebvteshortshortlonglongbooleanboolean卜面举例来具体说明一下public class odemo05public static void main(string args)string num二“123”

16、;int temp=lnteger.parselnt( num);system, out. printin (temp*2);代码红字部分就是int类型对应的_个对象操作parselnt是一个将当前类型转换成int型的方法。f面是运行结果c: jauatestjauaobject>jauac odeno05.jauac: javatestjavasobject >java odeno05246|c 二jauaxobject >这里要注意的一点是,如果要对数据进行类型转换,则必须保证数据 在将要转换成的类型下是合法的。比如上面要求被转换成整型的数据 不是t23"而是&

17、quot;abc",程序就会报错。回到开始时的问题,现在要求名字和年龄由系统运行时输入,代码如下:class pers onstring name;int age;string shout()return “姓名:n+name+n ,年龄:n+age;public class odemo05public static void main(string args)if (argsength!=2)system.out.println("参数输入有错误,可按以下格式输 入:");system.out.printlnc'java 类名称名字年龄“);system

18、.exit(l);string namel=argso;int agel=lnteger.parselnt(argsl);person p=new person();p.n ame 二 n amel;p.age=agel;system.out.printl n(p.shout();在结果执行时我输入小明23 系统将其以string类型接收,然后将23转换为int类型输出。运行结果如下:c: jauatest jauaobject >jaua o de no 05 小明 23 姓名:小明,年龄:23c: javatestct上面是以正确格式直接输出的。注意代码红色部分,我加入了_些增 强程序健壮性的语句,当输入的格式有错误时提示正确格式,并退出(system.exit(l) 下面是输出结果:c: jauatestjauaobject>jauac odeno05.jauac: j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论