疯狂JAVA讲义---第五章(上):面向对象

第五章 面向对象(上)

 

 

这章前部分讲了面向对象的基础,过于基础了,由于我学过别的面向对象语言c++,C#等也就没难度了,对于没学过的,还是要自己搞搞脑子的,光看懂也没用,要自己多尝试用面向对象的思想来思考问题。

书上讲了一个例子我们平时不注意的,先看代码

  1. public class Dog
  2. {
  3.     //定义一个jump方法
  4.     public void jump()
  5.     {
  6.         System.out.println("正在执行jump方法");
  7.     }
  8.     //定义一个run方法,run方法需要借助jump方法
  9.     public void run()
  10.     {
  11.         Dog d = new Dog();
  12.         d.jump();
  13.         this.jump();
  14.         System.out.println("正在执行run方法");
  15.     }
  16. }
  17. public class TestDog
  18. {
  19.     public static void main(String[] args) 
  20.     {
  21.         //创建Dog对象
  22.         Dog dog = new Dog();
  23.         //调用Dog对象的run方法
  24.         dog.run();
  25.     }
  26. }

 

大家能说清main方法中共产生几个dog对象吗?

其实很简单用this就可以利用原本的对象不用自己再new个了,节省了系统开销,而且用原本的对象更符合面向对象的思想。

然后讲了类的方法,这个只要记住一点,java都是值传递的,没c++等语言中的引用传递。这样使编程的思路很清晰,方式多了人的思路就乱了。

还说了个jdk1.5后的特性支持形参长度可变的方法,eg

 

  1. public class Varargs
  2. {
  3.     //定义了形参个数可变的方法 
  4.     public static void test(int a , String... books)
  5.     {
  6.         //books被当成数组处理 
  7.         for (String tmp : books)
  8.         {
  9.             System.out.println(tmp);
  10.         }
  11.         //输出整数变量a的值 
  12.         System.out.println(a);
  13.     }
  14.     public static void main(String[] args) 
  15.     {
  16.         //调用test方法,为args参数可以传入多个的字符串 
  17.         test(5 , "Struts2权威指南" , "基于J2EE的Ajax宝典");
  18.         //调用test方法,为args参数可以传入多个的字符串 
  19.         test(23 , new String[]{"Ruby On Rails敏捷开发最佳实践" , "轻量级企业应用实战"});
  20.     }
  21. }

这个还是挺方便的。当只能用在最后一个参数,导致使用面不广。使用数组来处理可变参数也是个好办法,他不限制位置。

下一部分讲了成员变量和局部变量

成员变量分为实例属性和类属性,类属性比实例属性范围大,下面看个具体例子,大家自己去体会。

eg

  1. public class Person
  2. {
  3.     //定义一个实例属性
  4.     public String name;
  5.     //定义一个类属性
  6.     public static int eyeNum;
  7. }
  8. public class TestPerson
  9. {
  10.     public static void main(String[] args) 
  11.     {
  12.         //Person类已经加载,则eyeNum变量起作用了,输出0
  13.         System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
  14.         //创建Person对象
  15.         Person p = new Person();
  16.         //通过Person对象的引用p来访问Person对象name实例属性
  17.         //并通过实例访问eyeNum类属性
  18.         System.out.println("p变量的name属性值是:" + p.name 
  19.             + " p对象的eyeNum属性值是:" + p.eyeNum);
  20.         //直接为name实例属性赋值
  21.         p.name = "孙悟空";
  22.         //通过p访问eyeNum类属性,依然是访问Person的eyeNum属性
  23.         p.eyeNum = 2;
  24.         //再次通过Person对象来访问name实例属性和eyeNum类属性
  25.         System.out.println("p变量的name属性值是:" + p.name 
  26.             + " p对象的eyeNum属性值是:" + p.eyeNum);
  27.         //前面通过p修改了Person的eyeNum属性,此处的Person.eyeNum将输出2
  28.         System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
  29.         Person p2 = new Person();
  30.         //p2访问的eyeNum类属性依然引用Person类的,因此依然输出2
  31.         System.out.println("p2对象的eyeNum类属性值:" + p2.eyeNum);
  32.     }
  33. }

 

主要要注意这里通过对象修改了类的属性

最后讲下局部变量可以覆盖全局变量,eg

  1. public class TestVariableOverride
  2. {
  3.     //定义一个name实例属性
  4.     private String name = "李刚";
  5.     //定义一个price类属性
  6.     private static double price = 78.0;
  7.     //主方法,程序的入口
  8.     public static void main(String[] args) 
  9.     {
  10.         //方法里的局部变量,局部变量覆盖成员变量
  11.         int price = 65;
  12.         //直接访问price变量,将输出price局部变量的值:65
  13.         System.out.println(price);
  14.         //使用类名来作为price变量的限定,将输出price类属性的值:78.0
  15.         System.out.println(TestVariableOverride.price);
  16.         //运行info方法
  17.         new TestVariableOverride().info();
  18.     }
  19.     public void info()
  20.     {
  21.         //方法里的局部变量,局部变量覆盖成员变量
  22.         String name = "孙悟空";
  23.         //直接访问name变量,将输出name局部变量的值:"孙悟空"
  24.         System.out.println(name);
  25.         //使用this来作为name变量的限定,将输出price实例属性的值:"李刚"
  26.         System.out.println(this.name);
  27.     }
  28. }

靠~~这章太厚了,我将分三天来分析,请待下回分解。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值