《scjp认证第七讲课件》由会员分享,可在线阅读,更多相关《scjp认证第七讲课件(26页珍藏版)》请在金锄头文库上搜索。
1、第七章,高级类特性,2,本章内容,Java类的static成员 final关键字 抽象类 接口 内部类,3,static 类属性(考点),类属性由该类的所有实例共享,public class Person private int id; public static int total = 0; public Person() total+; id = total; ,4,类属性应用举例,class Person private int id; public static int total = 0; public Person() total+; id = total; public clas
2、s OtherClass public static void main(String args) Person.total = 100; System.out.println(Person.total); Person c = new Person(); System.out.println(Person.total); ,5,类方法应用举例,class Person private int id; private static int total = 0; public static int getTotalPerson() return total; public Person() to
3、tal+; id = total; public class TestPerson public static void main(String args) System.out.println(Number of total is +Person.getTotalPerson(); Person p1 = new Person(); System.out.println( Number of total is + Person.getTotalPerson(); ,运行结果: Number of total is 0 Number of total is 1,6,静态初始化(考点),在类的定
4、义体中、方法的外部可包含static语句块 static语句块仅在其所属的类被载入时执行一次 static块通常用于初始化static (类)属性 class Person public static int total; static total = 100; /为total赋初值 /其它属性或方法声明 ,7,静态初始化举例,class Person public static int total; static total = 100; System.out.println(in static block!); public class Test public static void ma
5、in(String args) System.out.println(total = + Person.total); System.out.println(total = + Person.total); ,8,关键字static(考点),在Java类中声明变量、方法和内部类时,可使用关键字static做为修饰符。 static标记的变量或方法由整个类(所有实例)共享,如访问控制权限允许,可不必创建该类对象而直接用类名加.调用。 static成员也称类成员或静态成员,如:类属性、类方法、静态方法等。,9,单子Singleton 设计模板,class Single private static
6、 Single onlyone = new Single(); /私有的,只能在类的内部访问 private String name; public static Single getSingle() /getSingle()为static,不用创建对象即可访问 return onlyone; private Single() /private的构造器,不能在类的外部创建该类的对象 public class TestSingle public static void main(String args) Single s1 = Single.getSingle() ; /访问静态方法 Singl
7、e s2 = Single.getSingle(); if (s1=s2) System.out.println(s1 is equals to s2!); ,10,关键字final应用举例,import java.io.*; public final class Test public static int totalNumber= 5 ; public final int id; public Test() id = +totalNumber; public static void main(String args) Test t = new Test(); System.out.prin
8、tln(t.id); final int i = 10; final int j; j = 20; j = 30; /非法 ,11,关键字final(考点),在Java中声明类、属性和方法时,可使用关键字final来修饰。 final标记的类不能被继承。 final标记的方法不能被子类重写。 final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。 final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值,然后才能使用。,12,枚举类型(jdk1.5新特性)(考点),在编程中使用一组有限的符号名称来表示属性值,这通常称为枚举类型. 使用关键字enum进行定义 如: pub
9、licenum Suit SPADES,HEARTS,CLUBS,DIAMONDS Suit.SPADES是类型Suit,13,高级枚举类型(考点),新的枚举类型功能允许象常规类一样带有属性和方法 如: publicenumSuit SPADES(“Spades”), HEARTS(“Hearts”) ; private final String name; private Suit(String name)this.name=name; public String getName()return this.name System.out.println(Suit.SPADES.getName
10、();,14,抽象类举例,abstract class A abstract void m1( ); public void m2( ) System.out.println(A类中定义的m2方法); class B extends A void m1( ) System.out.println(B类中定义的m1方法); public class Test public static void main( String args ) A c = new B( ); c.m1( ); c.m2( ); ,15,抽象类(abstract class)(考点),用abstract关键字来修饰一个类时
11、,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。 抽象类不能被实例化。 抽象方法只需声明,而不需实现。 abstract returnType abstractMethod( paramlist );,16,接口应用举例(1),public interface Runner public void start(); public void run(); public void stop(); public class Person implements Runner public void
12、start() / 准备工作:弯腰、蹬腿、咬牙、瞪眼/ 开跑 public void run() / 摆动手臂 / 维持直线方向 public void stop() / 减速直至停止、喝水。 ,17,接口应用举例(2),18,接口应用举例(3),interface Runner public void run(); interface Swimmer public double swim(); class Animal public int eat(); /非法,为什么? class Person extends Animal implements Runner,Swimmer public
13、 void run() public double swim() public int eat() public class Test public static void main(String args) Test t = new Test(); Person p = new Person(); t.m1(p); t.m2(p); t.m3(p); public String m1(Runner f) f.run(); public void m2(Swimmer s) s.swim(); public void m3(Animal a) a.eat(); ,19,接 口(1)(考点),接
14、口(interface)是抽象方法和常量值的定义的集合。 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。 接口定义举例 public interface Runner int id = 1; public void start(); public void run(); public void stop(); ,20,接 口(2)(考点),多个无关的类可以实现同一个接口 一个类可以实现多个无关的接口 与继承关系类似,接口与实现类之间存在多态性 定义Java类的语法格式: class extends implements ,* * ,21,接口用
15、法总结,通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。 通过接口可以指明多个类需要实现的方法。 通过接口可以了解对象的交互界面,而不需了解对象所对应的类。,22,内部类举例 (1),class A private int s; public class B public void mb() s = 100; System.out.println(在内部类B中s= + s); public void m() B i = new B(); i.mb(); public class Test public static void main(String args) A o =
16、 new A(); o.m(); ,23,内部类举例 (2),public class A private int s; public class B public void mb() System.out.println(s); public class Test public static void main(String args) A a = new A(); / 创建一个依赖于a而存在的b A.B b = a.new B(); b.mb(); ,栈内存,a,B类对象,0,A类对象,s,b,this,堆内存,处内存状态,main,mb,A.this,24,内部类举例 (3),public class A private int s = 111;