《类的访问控制只有public和无修饰符(默认)两种.ppt》由会员分享,可在线阅读,更多相关《类的访问控制只有public和无修饰符(默认)两种.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2.2.6 类的访问控制类的访问控制只有只有public和无修饰符(默认)两种。和无修饰符(默认)两种。类型类型无修饰符无修饰符public同一包中的同一包中的类类可访问可访问可访问可访问不同包中的不同包中的类类不可访问不可访问可访问可访问 注意:注意:一个源程序中至多有一个一个源程序中至多有一个public共有类,且必须与共有类,且必须与public类名相同类名相同2.2.7类成员的访问控制类成员的访问控制同一同一个类个类同一同一个包个包不同包不同包的子类的子类不同包不同包非子类非子类private*default*protected*public*Java名空间及访问规则名空间及访问规则变
2、量和方法的修饰字变量和方法的修饰字public、protected、privatepublic:任何其它类、对象只要可以看到这个任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或类的话,那么它就可以存取变量的数据,或使用方法。使用方法。class ABC public int pub_i=5;public void show)()System.out.println (“pub_i”+pub_i);Java名空间及访问规则名空间及访问规则class Demo public static void main(String args)ABC abc=new ABC();Syst
3、em.out.println(“abc.pub_i”+abc.pub_i);abc.pub_i=10;abc.show();abc.pub_i=5pub_i=10;Java名空间及访问规则名空间及访问规则protected变量和方法变量和方法如果一个类中变量或方法有修饰字如果一个类中变量或方法有修饰字protected,同一类,同一包可以使同一类,同一包可以使用。不同包的类要使用,必须是该用。不同包的类要使用,必须是该类的子类可以存取变量或调用类的子类可以存取变量或调用package mytest.pack;public class ABC protected int pro_i=5;prot
4、ected void show()System.out.println (“pro_i=”+pro_i;)Java名空间及访问规则名空间及访问规则不同包中的类不能使用不同包中的类不能使用class DEF public static void main(String args)ABC abc=new ABC();System.out.println (“abc.pro_i=“+abc.pro_i);abc.pub_i=10;abc.show();import mytest.pack.ABC;class DEF extends ABC public static void main(String
5、 agrs)DEF def=new DEF();System.out.println(def.i);def.i=10;def.show();pro_i=5pro_i=10Java名空间及访问规则名空间及访问规则不同包但是是子类不同包但是是子类Java名空间及访问规则名空间及访问规则private不允许任何其他类存取和调用不允许任何其他类存取和调用friendly(前边没有修饰字的情况前边没有修饰字的情况)在同一程序包中出现的类才可在同一程序包中出现的类才可以直接使用它的数据和方法以直接使用它的数据和方法.Java名空间及访问规则名空间及访问规则当子类中的变量名与父类的相同当子类中的变量名与父类
6、的相同,原来的变量原来的变量被遮盖被遮盖.class A static int data_a=3;class B extends A static int data_a=5;class C extends B void print_out()System.out.println(“data_a=”+data_a);System.out.println(“A.data_a=”+A.data_a);System.out.println(“B.data_a=”+B.data_a);data_a=5A.data_a=3B.data_a=5class demo public static void ma
7、in(String args)C c=new C();c.print_out();Java名空间及访问规则名空间及访问规则1231.23类类void show(int int_num)void show(double double_num)void show(nit nit_ um,float float_um)123,1.23方法的覆盖方法的覆盖(overriding)和重载和重载(overloading)子孙类中定义的方法和祖先类中某个方法同子孙类中定义的方法和祖先类中某个方法同名名,同参数行同参数行,则祖先类中的该方法被覆盖则祖先类中的该方法被覆盖.方法的重载是指一个对象的多态性方法的重
8、载是指一个对象的多态性,即多个方即多个方法用相同的名称法用相同的名称,但参数行不同但参数行不同.Java名空间及访问规则名空间及访问规则到此为止到此为止-finalfinal在方法之前在方法之前,防止该方法被覆防止该方法被覆盖盖.final在类之前在类之前,标是该类不能被继标是该类不能被继承承final在变量之前在变量之前,定义一个常量定义一个常量.一般情况下,我们很少把成一般情况下,我们很少把成员变量标识为员变量标识为public类型,而使用类型,而使用private类型。类型。通过使用类或者对象的通过使用类或者对象的set方方法和法和get方法对成员变量进行修改方法对成员变量进行修改或者取
9、得成员变量的值。或者取得成员变量的值。public class Circlestatic double PI=3.14.5926;private int radius;public double circumference()return(2*PI*radius);/radius为私有类型,不能被其他类访问为私有类型,不能被其他类访问到。到。通过通过set和和get方法为私有变量方法为私有变量radius赋值和取得其数据。赋值和取得其数据。public class Circlestatic double PI=3.14.5926;private int radius;public double
10、 circumference()return(2*PI*radius);public int getRadius()return radius;public int setRadius(int r)radius=r;this的用法的用法(使用使用this来表示来表示“自己自己”)public class Circlestatic double PI=3.14.5926;private int radius;public double circumference()return(2*PI*radius);public int getRadius()return radius;public int
11、 setRadius(int radius)this.radius=radius;使用使用new做内存配置做内存配置class Demo1 /数组的配置数组的配置 public static void main(String args)int array ;array=new int55;array14=5;class myClass /对象实体的产生对象实体的产生 int data=5;class Demo2 public static void main(String args)myClass obj;/建立一个引用建立一个引用 obj=new myClass();System.out.p
12、rintln(obj.data);2.3 对象的构造函数对象的构造函数constructorConstructor(构造函数):在一个类中和类同名构造函数):在一个类中和类同名的方法叫构造函数的方法叫构造函数系统在产生对象时会自动执行系统在产生对象时会自动执行class Point int x,y;Point()x=0;y=0;Point(int new_x,int new_y)x=new_x,y=new_y;class UsePoint Point point_A=new Point();Point point_B=new Point(5,7);构造函数应包含哪些内容构造函数应包含哪些内容构
13、造函数多半定义一些初值或内存配构造函数多半定义一些初值或内存配置工作置工作一个类可以有多个构造函数一个类可以有多个构造函数(重载重载),根据参数的不同决定执行哪一个根据参数的不同决定执行哪一个如果程序中没有定义构造函数,则创如果程序中没有定义构造函数,则创造实例时使用的是缺省函数,它是一造实例时使用的是缺省函数,它是一个无内容的空函数个无内容的空函数2.3.2 内存回收技术1、什么是无用对象A、程序流程已经超出了对象的作用范围。B、没有任何引用引用该对象2、当发现某对象变成无用对象时,就将该对象列入待回收列表中。但是,并不是马上予以销毁。3、System.gc()运行的时机A、系统需要回收时运
14、行B、程序中显式的调用System.gc(),但是该调用也并不能保证立刻就回收内存。4、每个对象都有finalize()方法。在垃圾回收之前该方法被调用。上机遇到的问题上机遇到的问题1、环境变量的配置:、环境变量的配置:出现什么出现什么javac不是内部或外部命不是内部或外部命令,也不是可运行的程序或批处理文件。令,也不是可运行的程序或批处理文件。你遇到了你遇到了path问题。操作系统在一定的问题。操作系统在一定的范围范围(path)内搜索内搜索javac.exe,但是没能找到。但是没能找到。编辑编辑Path变量,然后关掉并新开一个变量,然后关掉并新开一个dos窗窗口,你就可以使用口,你就可以
15、使用javac和和java命令了。命令了。2、javac xxx.java顺利通过了,但是顺利通过了,但是java xxx的时候显示什么的时候显示什么NoClassDefFoundError答:你遇到了答:你遇到了classpath问题。问题。java命令在一定命令在一定的范围的范围(classpath)内搜索你要用的内搜索你要用的class文件,文件,但是未能找到。但是未能找到。首先请确认你首先请确认你没有错敲成没有错敲成java xxx.class,其次,检查你的其次,检查你的CLASSPATH环境变量环境变量,如果,如果你设置了该变量又你设置了该变量又没有包含没有包含.(代表当前目录(代
16、表当前目录),你就会遇到这个问题。请在你的),你就会遇到这个问题。请在你的CLASSPATH环境变量中加入一项环境变量中加入一项.。3、我在、我在java xxx的时候显示的时候显示Exceptioninthreadmainjava.lang.NoSuchMethod Error:main。答:首先,在你的程序中每个答:首先,在你的程序中每个java文件有且只文件有且只能有一个能有一个public类,这个类的类名必须和文件类,这个类的类名必须和文件名的大小写完全一样。名的大小写完全一样。其次,在你要运行的类中有且只能有一个其次,在你要运行的类中有且只能有一个publicstaticvoidma
17、in(Stringargs)方法,这方法,这个方法就是你的主程序。个方法就是你的主程序。再次,再次,class名字也就是类名应该以大写字母名字也就是类名应该以大写字母开始。例如:开始。例如:Suiji.java不能写成不能写成suiji.java4、我想把、我想把java编译成编译成exe文件,该怎么做?文件,该怎么做?答:答:JDK只能将只能将java源文件编译为源文件编译为class文件。文件。class文件是一种跨平台的字节码,必须依赖文件是一种跨平台的字节码,必须依赖平台相关的平台相关的JRE来运行。来运行。Java以此来实现跨以此来实现跨平台。平台。有些开发工具可以将有些开发工具可以将java文件编译为文件编译为exe文件。文件。非常反对这种做法,因为这样就取消了跨平非常反对这种做法,因为这样就取消了跨平台性。台性。如果你确信你的软件只在如果你确信你的软件只在Windows平台上运平台上运行,你可以考虑使用行,你可以考虑使用C+/C#来编程。来编程。