当前位置:
文档之家› JAVA对象 数组作为参数传递,静态变量 静态方法的使用,内部类,使用文档注释
JAVA对象 数组作为参数传递,静态变量 静态方法的使用,内部类,使用文档注释
java 学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释 2009-10-15 20:21 ***对象作为参数传递*** class passparam { int x; public static void main(String[] args) { passparam obj = new passparam();
class Outer { int outer_i=100; void test() { Inner in=new Inner();
in.display(); } class Inner { void display()
{ System.out.println("display: outer_i="+outer_i); } } } class InnerClassDemo { public static void main(String[] args)
class TestChinese { public static void main(String[] args) { System.out.println(Chinaese.country); //static 静态变量可以直接引用
Chinese ch1=new Chinese(); ch1.singOurCountry(); System.out.println(ch1.country); Chinese.sing(); //静态方法的引用 new.Chinese.sing(); // 用对象引用方法 } } -------------------------------class Chinese { private static int count=0; //定义一个静态整形变量 static //静态代码块 类在第一次使用时,初使化 { count=2; //这个类在第一次使用时,count 被初使化 System.out.println("static code") } String name; int age; public Chinese() { System.out.println(++count); } } class TestChinese { public static void main(String[] age){ System.out.println("static begin") new Chinese(); System.out.println("end") new Chinese(); new Chinese(); } } 输出结果为 static begin static code 3 end 4 5 -----------------------------------**静态方法 注意: 1、在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法)。这是因为,对于非静态方法和变量,需要先创建类的实例对 象后
public void doStuff(int size) { size++; //引用的是 doStuff 函数的形参
this.size++; //引用的是 Inner 类中的成员变量 Outer.this.size++; //引用的 Outer 类中的成员变量 } } }
---------------------------------------------****内部类如何被外部引用**** 内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明为 Public 即可。 class Outer { private int size=10; public class Inner //被外部引用,必须声明为 public { public void doStuff()
2, 类里面定义的对象必须是 private,static,也可以加上 final 3, 类里面要有一个调用对象的类,这个类必须是 public,static,和类形是这个类的名 ,类中的其它要调用的方法还用 public -------------单态设计模式 : 所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类 只提供 一个取得其对象实例的方法,如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为 private,这 样,就不能用 new 操作符在类的外部开始产类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象, 只能调 用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也 必须定 义成静态的。 -------------------------------------------------------***嵌套类*** 1.嵌套类可以直接访问嵌套它的类成员,包括 private 成员,但是,嵌套类的成员却不能被嵌套它的类直接访问。 2.在类中直接定义的嵌套类的使用范围,仅限于这个类的内部,也就是说,A 类里定义了一个 B 类,那么 B 为 A 所知,却不被 A 的外面 所知。内部类 的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法,就像外部类中的其他非 static 成员的功能一样, 和 外部类不同的是,内部类可以声明为 private 或 protected. 3.内部类可以用 static 来修饰,这样相当于是一个外部定义的类,它的用法就和外部类一样了,所以 static 的内部类中可声明 static 成员, static 的内部类不能再使用外层封装类的非 static 的成员变量,staic 嵌套类很少使用.
Chinese obj2 = chinese.getInstance(); System.out.println(obj1==obj2); //返回结果为 true new Chinese(); //此处出错,因为构造函数已经是私有的了,所以不能再这样定义对象了。 } } 注意:1,构造函数必须设为 private
{ Outer outer=new Outer() outer.test();
} } 输出结果:display: outer_i=100 -----------------------------------------------------------------经验: 当一个类中的程序代码要用到另外一个类的实例对象,而另外一个类中的程序代码又要访问第一个类中的成员,将另外一个类做 成第一 个类的内部类,程序代码就要容易编写得多,这样的情况在实际应用中非常之多! --------------------------------------------------------------------***如果函数的局部变量(函数的形参也是局部变量),内部类的成员变量,外部类的成员变量重名,我们应该按下面的程序代码所使用的 方式来 明确指定我们真正要访问的变量。 pulic class Outer { private int size; public class Inner { private int size;
{ System.out.println(++size); } } } public class TestInner { public static void main(String[] args) { Outer a =new Outer();
才可使用,而静态方法在使用前不用创建任何对象。 2、静态方法不能以任何方式引用 this 和 super 关键字。与上面的的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方 法被 调用时,this 所引用的对象根本就没有产生。 3、main()方法是静态的,因此 JVM 在执行 main 方法时不创建 main 方法所在类的实例对象,因而在 main()方法中,我们不能直接访问 该类中的 非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。 class B{ public void b(){ System.out.print("000");} public static void e(){} public void c(){b();
obj.x=5; change(obj); System.out.println(obj.x); //如果 change 方法不是静态的,想调用它就得写成 new passparam().change(obj); } public static void change(passparam obj) //如果这个函数前面没加 static 编译出错,因为非静态方法,不能被静态方法直接调用,main 是一个静态方法。 { obj.x=3;} } 结果: 3 ***数组作为参数传递*** class passparam { int x; public static void main(String[] args) { passparam obj = new passparam(); int []x=new int[1]; x[0]=5; change(x); System.out.println(x[0]); } public static void change(int[] x) { x[0]=3; } } 结果: 3 ***静态变量、静态方法的使用*** 静态变量相当于全局变量 class Chinese { static string country="中国"; //如果改为 private static string country="中国" 下面的两处调用,就会出错 String name; int age; static void sing() { System.out.println("啊~~") void singOurCountry() { System.out.println(country); sing(); } }