第五章 面向对象(上)
这章前部分讲了面向对象的基础,过于基础了,由于我学过别的面向对象语言c++,C#等也就没难度了,对于没学过的,还是要自己搞搞脑子的,光看懂也没用,要自己多尝试用面向对象的思想来思考问题。
书上讲了一个例子我们平时不注意的,先看代码
public class Dog { public void jump() { System.out.println("正在执行jump方法" ); } public void run() { Dog d = new Dog(); d.jump(); this .jump(); System.out.println("正在执行run方法" ); } } public class TestDog { public static void main(String[] args) { Dog dog = new Dog(); dog.run(); } }
大家能说清main方法中共产生几个dog对象吗?
其实很简单用this就可以利用原本的对象不用自己再new个了,节省了系统开销,而且用原本的对象更符合面向对象的思想。
然后讲了类的方法,这个只要记住一点,java都是值传递的,没c++等语言中的引用传递。这样使编程的思路很清晰,方式多了人的思路就乱了。
还说了个jdk1.5后的特性支持形参长度可变的方法,eg
public class Varargs{ public static void test(int a , String... books) { for (String tmp : books) { System.out.println(tmp); } System.out.println(a); } public static void main(String[] args) { test(5 , "Struts2权威指南" , "基于J2EE的Ajax宝典" ); test(23 , new String[]{"Ruby On Rails敏捷开发最佳实践" , "轻量级企业应用实战" }); } }
这个还是挺方便的。当只能用在最后一个参数,导致使用面不广。使用数组来处理可变参数也是个好办法,他不限制位置。
下一部分讲了成员变量和局部变量
成员变量分为实例属性和类属性,类属性比实例属性范围大 ,下面看个具体例子,大家自己去体会。
eg
public class Person { public String name; public static int eyeNum; } public class TestPerson { public static void main(String[] args) { System.out .println("Person的eyeNum类属性值:" + Person.eyeNum); Person p = new Person(); System.out .println("p变量的name属性值是:" + p.name + " p对象的eyeNum属性值是:" + p.eyeNum); p.name = "孙悟空" ; p.eyeNum = 2; System.out .println("p变量的name属性值是:" + p.name + " p对象的eyeNum属性值是:" + p.eyeNum); System.out .println("Person的eyeNum类属性值:" + Person.eyeNum); Person p2 = new Person(); System.out .println("p2对象的eyeNum类属性值:" + p2.eyeNum); } }
主要要注意这里通过对象修改了类的属性 。
最后讲下局部变量可以覆盖全局变量,eg
public class TestVariableOverride{ private String name = "李刚" ; private static double price = 78.0 ; public static void main(String[] args) { int price = 65 ; System.out.println(price); System.out.println(TestVariableOverride.price); new TestVariableOverride().info(); } public void info() { String name = "孙悟空" ; System.out.println(name); System.out.println(this .name); } }
靠~~这章太厚了,我将分三天来分析,请待下回分解。