您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > JavaSE_7_面向对象编程(二)
源自清华值得信赖中国移动互联网研发培训专家千锋教学部JAVA的面向对象(二)源自清华值得信赖中国移动互联网研发培训专家目标this关键字方法的参数传递static关键字包的创建和导入源自清华值得信赖中国移动互联网研发培训专家关键字thisJava中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。◦在构造方法中指该方法所创建的新对象◦在非static的普通方法中指调用该方法的对象◦在IDE工具中用this.来让系统提示本类中的属性和实例方法.源自清华值得信赖中国移动互联网研发培训专家关键字thispublicclassThisSample{privateintyear;privateintmonth;privateintday;publicThisSample(intyear,intmonth,intday){this.year=year;this.month=month;//this.day=day;/*this.*/setDay(day);}publicvoidsetYear(intyear){this.year=year;}publicvoidsetMonth(intm){month=m;}publicvoidsetDay(intd){day=d;}publicvoidsetting(){this.setYear(2001);//在方法里面调用其他方法(不是在方法声明中声明其他方法)this.setMonth(9);setDay(11);//等价于this.setDay(11);}}源自清华值得信赖中国移动互联网研发培训专家运行程序并分析流程,体会this的用法。publicclassTestMyDate{publicstaticvoidmain(String[]args){MyDatem1=newMyDate(22,7,1964);m1.display();}}//类MyDate的定义见第22页源自清华值得信赖中国移动互联网研发培训专家如果某个构造方法的第一条语句是this(...),那么这个构造方法将调用本类中的重载的其他构造方法。用于复用其他构造方法中的初始化代码(DRY原则)publicclassEmployee{privateStringname;//姓名privateintage;//年龄privatedoublesalary;//薪水publicEmployee(Stringname,intage,doublesalary){//构造方法1this.name=name;this.age=age;this.salary=salary;}publicEmployee(){//构造方法2this(无名,18,800.0);//调用到了构造方法1}}this调用重载的构造方法源自清华值得信赖中国移动互联网研发培训专家举例基本类型数据传递的是该数据的值本身(变量的副本)。引用类型数据传递的是这个对象的引用(的副本),而非对象本身。源自清华值得信赖中国移动互联网研发培训专家publicclassPassValue{publicstaticvoidmain(String[]args){PassValuepv=newPassValue();intx=5;System.out.println(“方法调用之前x==”+x);pv.change(x);System.out.println(“方法调用之后x==”+x);}publicvoidchange(inty){y=100;System.out.println(“方法中y==”+y);}}5main方法中的栈内存情况x???change方法中的栈内存情况x源自清华值得信赖中国移动互联网研发培训专家publicclassPassValue2{privateintx;publicstaticvoidmain(String[]args){PassValue2obj=newPassValue2();obj.x=5;System.out.println(“方法调用之前obj.x==”+obj.x);obj.change(obj);System.out.println(“方法调用之后obj.x==”+obj.x);}publicvoidchange(PassValue2obj2){obj2.x=100;System.out.println(“方法中obj2.x==”+obj2.x);}}0x3000main方法中的栈内存情况obj0x3000change方法中的栈内存情况obj2堆内存5x源自清华值得信赖中国移动互联网研发培训专家Demo返回值类型是所在类的类型,add(..).add(..)...每次调用,age+...multiple(..).multiple(..),每次调用,age*...源自清华值得信赖中国移动互联网研发培训专家关键字static应用场景:不想创建某个类的对象,而希望直接访问该类的属性或方法在Java类中声明全局变量(类里面的属性)、普通方法(即不是构造方法)和内部类时,可使用关键字static做为修饰符。static标记的全局变量由整个类(所有对象)共享,无论该类是否产生了对象,产生了多少个对象,都有且只有一份.在类加载时,类变量(也就是静态变量)会自动初始化.Demo如访问控制权限允许,可不必创建该类对象而直接用类名加.调用static属性或方法。static成员也称类成员或静态成员,如:类属性、类方法、静态方法等。源自清华值得信赖中国移动互联网研发培训专家类属性应用举例classPerson{privateintid;//每个对象拥有一个idpublicstaticinttotal=0;//publicPerson(){total++;id=total;}}publicclassOtherClass{publicstaticvoidmain(Stringargs[]){Person.total=100;System.out.println(Person.total);Personc=newPerson();System.out.println(Person.total);}}源自清华值得信赖中国移动互联网研发培训专家类方法应用举例//Person.javapublicclassPerson{privateintid;privatestaticinttotal;//=0;publicstaticintgetTotalPerson(){returntotal;}publicPerson(){total++;id=total;}}//TestPerson.javapublicclassTestPerson{publicstaticvoidmain(String[]args){System.out.println(Numberoftotalis+Person.getTotalPerson());Personp1=newPerson();System.out.println(Numberoftotalis+Person.getTotalPerson());}}源自清华值得信赖中国移动互联网研发培训专家DemoDog类:staticintno;intid;Stringname定义两个重载的构造方法测试静态属性no,用对象方法获取no.源自清华值得信赖中国移动互联网研发培训专家思考1.构造方法可以声明成static的吗?2.构造方法可以使用static的属性吗?3.构造方法可以调用static的方法吗?4.static可以用来修饰类吗?5.static方法中可以直接访问类中的实例属性吗?6.static方法中可以直接访问类中的实例方法吗?7.static方法中可以直接访问类中的构造方法吗?源自清华值得信赖中国移动互联网研发培训专家易错点提示:静态方法中只能直接调用本类中的静态成员(变量和方法)。静态方法中不能使用this和super关键字。源自清华值得信赖中国移动互联网研发培训专家静态初始化(static语句块)在类的定义体中、方法的外部可包含static语句块static语句块仅在其所属的类被载入时执行一次仅声明该类的引用,不会执行static{}static语句块通常用于初始化static属性(类属性)classPerson{publicstaticinttotal;static{total=100;//为total赋初值}……//其它属性或方法声明}源自清华值得信赖中国移动互联网研发培训专家静态初始化举例classPerson{publicstaticinttotal;static{total=100;System.out.println(instaticblock!);}}publicclassTest{publicstaticvoidmain(String[]args){System.out.println(total=+Person.total);System.out.println(total=+Person.total);}}一旦用到了Person类,就会执行static{}源自清华值得信赖中国移动互联网研发培训专家语句块(构造语句块/空语句块)类中定义的{........}语句块相当于一个无参的构造方法,在其他构造方法之前执行创建对象的时候先执行staticblock,再执行block每新建一个对象,block被执行一次,相当于一个无参的构造方法,在构造方法之前执行源自清华值得信赖中国移动互联网研发培训专家Demo两次创建对象,将调用一次static{},两次{},两次构造方法Cat2个static{}2个{}1个构造方法1个静态属性1个静态方法在场景类中创建两次该类的对象或进行静态属性/静态方法的访问,观察执行顺序源自清华值得信赖中国移动互联网研发培训专家[why]为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)的概念。◦在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突。[where]用package来声明包,package语句必须是java源文件中的第一条语句。(若无这条语句,则默认放置在无名包下)[how]在package语句中,用.来指明包(目录)的层次。包对应着文件系统的目录层次结构。◦如:packagecom.bjjava;编译后对应的类文件应位于com\bjjava目录下。源自清华值得信赖中国移动互联网研发培训专家packagecom.demo.test;publicclassEmployee{privateStringname;//姓名privateintage;//年龄privatedoublesalary;//薪水publicEmployee(Stringname,intage,doublesalary){//构造方法this.name=name;this.age=age;this.salary=salary;}……}声明包源自清华值得信赖中国移动互联网研发培训专家javacEmployee.java(半自动,需要手工创建目录)在当前目录下生成带包结构的字节码◦javac–d.Employee.java在指定目录下生成带包结构的字节码◦javac–dD:\shareEmployee.java运行:◦java包名.类名包名.类名叫做类的全限定名源自清华值得信赖中国移动互联网研发培训专家import语句为使用定义在不同包中的JAVA类,需要import语句来引入所需要的类。语法格式:importpackage1[.package2…](classname|*);源自清华值得信赖中国移动互联网研发培训专家要导入某个包中的所有类可以用:包名.*◦如上例:import
本文标题:JavaSE_7_面向对象编程(二)
链接地址:https://www.777doc.com/doc-2880417 .html