javase_7_面向对象编程(二)

上传人:第*** 文档编号:53404206 上传时间:2018-08-30 格式:PPT 页数:32 大小:1.78MB
返回 下载 相关 举报
javase_7_面向对象编程(二)_第1页
第1页 / 共32页
javase_7_面向对象编程(二)_第2页
第2页 / 共32页
javase_7_面向对象编程(二)_第3页
第3页 / 共32页
javase_7_面向对象编程(二)_第4页
第4页 / 共32页
javase_7_面向对象编程(二)_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《javase_7_面向对象编程(二)》由会员分享,可在线阅读,更多相关《javase_7_面向对象编程(二)(32页珍藏版)》请在金锄头文库上搜索。

1、千锋教学部,JAVA的面向对象(二),目标,this关键字 方法的参数传递 static关键字 包的创建和导入,关键字this,Java中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。 在构造方法中指该方法所创建的新对象 在非static的普通方法中指调用该方法的对象 在IDE工具中用this.来让系统提示本类中的属性和实例方法.,关键字this,public class ThisSampleprivate int year;private int month;private int day;public ThisSample(int year,int m

2、onth,int day) this.year = year; this.month = month; /this.day = day;/*this.*/setDay(day);public void setYear(int year) this.year = year; public void setMonth(int m) month = m; public void setDay(int d) day = d; public void setting()this.setYear(2001);/在方法里面调用其他方法(不是在方法声明中声明其他方法)this.setMonth(9);setD

3、ay(11); /等价于this.setDay(11); ,运行程序并分析流程,体会this的用法。public class TestMyDate public static void main(String args) MyDate m1 = new MyDate(22, 7, 1964); m1.display(); /类MyDate的定义见第22页,如果某个构造方法的第一条语句是this(.),那么这个构造方法将调用本类中的重载的其他构造方法。用于复用其他构造方法中的初始化代码(DRY原则),public class Employee private String name; /姓名pr

4、ivate int age; /年龄private double salary; /薪水public Employee(String name, int age, double salary) /构造方法1this.name = name;this.age = age;this.salary = salary;public Employee() /构造方法2this(“无名“, 18, 800.0); /调用到了构造方法1 ,this调用重载的构造方法,举例 基本类型数据传递的是该数据的值本身(变量的副本)。 引用类型数据传递的是这个对象的引用(的副本),而非对象本身。,public clas

5、s PassValuepublic static void main(String args)PassValue pv = new PassValue();int x = 5;System.out.println(“方法调用之前x=” + x);pv.change(x);System.out.println(“方法调用之后x=” + x);public void change(int y)y = 100;System.out.println(“方法中y=” + y); ,public class PassValue2private int x ;public static void main(

6、String args)PassValue2 obj = new PassValue2();obj.x = 5;System.out.println(“方法调用之前obj.x=” + obj.x);obj.change(obj);System.out.println(“方法调用之后obj.x=” + obj.x);public void change(PassValue2 obj2)obj2.x = 100;System.out.println(“方法中obj2.x=” + obj2.x); ,堆内存,5,x,Demo,返回值类型是所在类的类型, add().add().每次调用,age+.

7、multiple().multiple(),每次调用,age*.,关键字static,应用场景: 不想创建某个类的对象,而希望直接访问该类的属性或方法 在Java类中声明全局变量(类里面的属性)、普通方法(即不是构造方法)和内部类时,可使用关键字static做为修饰符。 static标记的全局变量由整个类(所有对象)共享,无论该类是否产生了对象,产生了多少个对象,都有且只有一份. 在类加载时,类变量(也就是静态变量)会自动初始化.Demo 如访问控制权限允许,可不必创建该类对象而直接用类名加 “.“调用static属性或方法。 static成员也称类成员或静态成员,如:类属性、类方法、静态方法

8、等。,类属性应用举例,class Person private int id;/每个对象拥有一个idpublic static int total = 0;/public Person() total+;id = total;public class OtherClass public static void main(String args) Person.total = 100;System.out.println(Person.total);Person c = new Person();System.out.println(Person.total); ,类方法应用举例,/Person

9、.java public class Person private int id;private static int total ;/= 0;public static int getTotalPerson() return total;public Person() total+;id = total; /TestPerson.java public class TestPerson public static void main(String args) System.out.println(“Number of total is “+Person.getTotalPerson();Pe

10、rson p1 = new Person();System.out.println( “Number of total is “+ Person.getTotalPerson(); ,Demo,Dog类:static int no;int id;String name 定义两个重载的构造方法 测试静态属性no,用对象方法获取no.,思考,1.构造方法可以声明成static的吗? 2.构造方法可以使用static的属性吗? 3.构造方法可以调用static的方法吗? 4.static可以用来修饰类吗? 5.static方法中可以直接访问类中的实例属性吗? 6.static方法中可以直接访问类中的

11、实例方法吗? 7.static方法中可以直接访问类中的构造方法吗?,易错点提示:,静态方法中只能直接调用本类中的静态成员(变量和方法)。 静态方法中不能使用this和super关键字。,静态初始化(static语句块),在类的定义体中、方法的外部可包含static语句块 static语句块仅在其所属的类被载入时执行一次 仅声明该类的引用,不会执行static static语句块通常用于初始化static属性 (类属性) class Person public static int total;static total = 100; /为total赋初值 /其它属性或方法声明,静态初始化举例,c

12、lass Person public static int total;static total = 100;System.out.println(“in static block!“); public class Test public static void main(String args) System.out.println(“total = “+ Person.total);System.out.println(“total = “+ Person.total); ,一旦用到了Person类,就会执行static,语句块(构造语句块/空语句块),类中定义的语句块相当于一个无参的构造

13、方法,在其他构造方法之前执行创建对象的时候先执行static block ,再执行block每新建一个对象,block被执行一次,相当于一个无参的构造方法,在构造方法之前执行,Demo,两次创建对象,将调用一次static,两次,两次构造方法 Cat 2个static 2个 1个构造方法 1个静态属性 1个静态方法 在场景类中创建两次该类的对象或进行静态属性/静态方法的访问,观察执行顺序,why为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)的概念。 在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了

14、名称上的冲突。 where用package来声明包,package语句必须是java源文件中的第一条语句。(若无这条语句,则默认放置在无名包下) how在package语句中,用“.“来指明包(目录)的层次。包对应着文件系统的目录层次结构。 如:package com.bjjava; 编译后对应的类文件应位于combjjava目录下。,package com.demo.test;public class Employee private String name; /姓名private int age; /年龄private double salary; /薪水public Employee(S

15、tring name, int age, double salary) /构造方法this.name = name;this.age = age;this.salary = salary;,声明包,javac Employee.java (半自动,需要手工创建目录) 在当前目录下生成带包结构的字节码 javac d . Employee.java 在指定目录下生成带包结构的字节码 javac d D:share Employee.java 运行: java 包名.类名 包名.类名 叫做类的全限定名,import语句 为使用定义在不同包中的JAVA类,需要import语句来引入所需要的类。 语法格式: import package1.package2(classname|*);,要导入某个包中的所有类可以用:包名.* 如上例:import com.qianfeng.*; 在同一包中的类可以直接引用,无需import语句。 建议把自定义的类都放置在包中。否则如果放在默认的包中,其他包中的类无法访问到,也不能import!,import com.qianfeng.Employee;public class PackageDemo public static void main(String args)Employee employee = new Employee( ); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号