当前位置:首页 > 第3章-面向对象(上)-补充案例
第3章-面向对象(上)-补充案例
}
}
void nonStaticMethod2() { }
public static void main(String[] args) { }
Example10.staticMethod1();
System.out.println(\非静态方法2\
运行结果如图3-15所示。
图3-15 运行结果
从运行结果可以看到,程序正常执行,这说明在静态方法中可以访问静态方法。
3、对静态方法staticMethod1()进行修改,在方法中访问非静态方法nonStaticMethod1(),代码如下所示:
public class Example10{ static void staticMethod1() { }
}
static void staticMethod2() { }
void nonStaticMethod1() { }
void nonStaticMethod2() { }
public static void main(String[] args) { }
Example10.staticMethod1();
System.out.println(\非静态方法2\System.out.println(\非静态方法1\System.out.println(\静态方法2\System.out.println(\静态方法1\nonStaticMethod1();
运行结果如图3-16所示。
图3-16 运行结果 17 / 25
第3章-面向对象(上)-补充案例
从错误提示信息可以看到,发生错误的原因是在静态方法中访问了非静态的方法。 4、在staticMethod1()方法中,将代码“nonStaticMethod1()”注释掉,并对非静态方法nonStaticMethod1()进行修改,在方法中分别调用静态方法statiMethod1()和非静态方法nonStaticMethod2()。在main()方法中创建Example09的实例对象,调用nonStaticMethod1()方法,代码如下所示:
public class Example10{ static void staticMethod1() { }
}
static void staticMethod2() { }
void nonStaticMethod1() { }
void nonStaticMethod2() { }
public static void main(String[] args) { }
Example10 e = new Example10(); e.nonStaticMethod1 ();
System.out.println(\非静态方法2\System.out.println(\非静态方法1\staticMethod1(); nonStaticMethod2();
System.out.println(\静态方法2\System.out.println(\静态方法1\// nonStaticMethod1();
运行结果如图3-17所示。
图3-17 运行结果
从运行结果可以看到,程序正常执行,这说明在非静态方法中既可以方法静态方法,也可以访问非静态方法。
三、案例总结
1、在静态方法中只能访问静态方法,在非静态方法中可以访问静态方法和非静态方法。
2、思考一下:在静态方法中是否能够访问静态变量和非静态变量?其实和上面的讲解一样,非静态变量只能通过对象或者对象的引用变量访问,而静态方法在创建对象之前就可以通过类名直接访问,因此在静态方法中不能访问非静态变量,只能访问静态变量。
18 / 25
第3章-面向对象(上)-补充案例
案例3-10 代码块 一、案例描述
1、 考核知识点
编号:
名称:静态代码块
2、 练习目标
? 理解代码块的不同分类
? 掌握不同代码块的作用及其执行时机
3、 需求分析
有时候,需要将某一段关联紧密的或者实现了某一功能的代码封装的一个代码块中。为了让初学者熟悉代码块的应用,本案例将编写一个包含了静态代码块,局部代码块和构造代码块的类,演示不同代码块之间的执行时机。
4、 设计思路(实现原理)
1)编写Example11类,在类中定义一个静态代码块、一个构造代码块、一个无参的构造方法和
一个成员方法localBlock(),在localBlock()方法中定义一个局部代码块。
2)创建Example11类的两个实例对象,使用Example11类型的变量e1和e2引用,并通过变量
e1和e2调用这两个对象的localBlock()方法。
二、案例实现
定义Example11类,代码如下所示:
public class Example11 {
static { } { }
public Example11() { }
void localBlock() { }
public static void main(String[] args) {
Example11 e1 = new Example11(); e1.localBlock();
System.out.println(\{ }
System.out.println(\局部代码块\System.out.println(\构造方法\System.out.println(\构造代码块\System.out.println(\静态代码块\
19 / 25
第3章-面向对象(上)-补充案例
}
}
Example11 e2 = new Example11(); e2.localBlock();
运行结果如图3-18所示。
图3-18 运行结果
三、案例总结
1、静态代码块在加载类的时候执行,由于类只在第一次使用时被加载,且只加载一次,因此静态代码块只执行一次。从运行结果可以看到,虽然创建了两个Example10的实例对象,由于Example10类只会加载一次,所以“静态代码块”只打印一次。 在实际开发中,经常有一些代码需要在类加载时就执行,比如加载数据库驱动,这些代码就应该放在静态代码块中。
2、构造代码块在创建类的实例对象时执行,也就是说每次创建类的实例对象时,都会执行一次构造代码块。从运行结果可以看到,构造代码块优先于构造方法执行,因此在实际开发中,可以把重载构造方法中重复的代码抽取到构造代码块中执行。
3、局部代码块定义在方法中,它在方法被调用的时候执行。使用局部代码块是为了限制变量的生命周期,使变量在使用完毕后被尽快回收,从而节省内存空间。
案例3-11 单例设计模式 一、案例描述
1、 考核知识点
编号:
名称:单例设计模式
2、 练习目标
? 了解什么是单例设计模式 ? 掌握单例设计模式的特点
3、 需求分析
在程序开发中,经常需要保证类的实例对象只有一个,这时,可以将类设计为单例设计模式。为了让初学者熟悉单例设计模式,本案例将编写一个实现了单例设计模式的类。
4、 设计思路(实现原理)
1)定义一个类Singleton,为了保证该类只能创建一个实例对象,在类中定义一个私有的构造方
20 / 25
共分享92篇相关文档