疯狂JAVA讲义---第五章(上):面向对象
2008-12-22 20:13
141 查看
第五章 面向对象(上)
这章前部分讲了面向对象的基础,过于基础了,由于我学过别的面向对象语言c++,C#等也就没难度了,对于没学过的,还是要自己搞搞脑子的,光看懂也没用,要自己多尝试用面向对象的思想来思考问题。
书上讲了一个例子我们平时不注意的,先看代码
public class Dog
{
//定义一个jump方法
public void jump()
{
System.out.println("正在执行jump方法");
}
//定义一个run方法,run方法需要借助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 dog = new Dog();
//调用Dog对象的run方法
dog.run();
}
}
大家能说清main方法中共产生几个dog对象吗?
其实很简单用this就可以利用原本的对象不用自己再new个了,节省了系统开销,而且用原本的对象更符合面向对象的思想。
然后讲了类的方法,这个只要记住一点,java都是值传递的,没c++等语言中的引用传递。这样使编程的思路很清晰,方式多了人的思路就乱了。
还说了个jdk1.5后的特性支持形参长度可变的方法,eg
public class Varargs
{
//定义了形参个数可变的方法
public static void test(int a , String... books)
{
//books被当成数组处理
for (String tmp : books)
{
System.out.println(tmp);
}
//输出整数变量a的值
System.out.println(a);
}
public static void main(String[] args)
{
//调用test方法,为args参数可以传入多个的字符串
test(5 , "Struts2权威指南" , "基于J2EE的Ajax宝典");
//调用test方法,为args参数可以传入多个的字符串
test(23 , new String[]{"Ruby On Rails敏捷开发最佳实践" , "轻量级企业应用实战"});
}
}
这个还是挺方便的。当只能用在最后一个参数,导致使用面不广。使用数组来处理可变参数也是个好办法,他不限制位置。
[b]下一部分讲了成员变量和局部变量[/b]
[b]成员变量分为实例属性和类属性,类属性比实例属性范围大,下面看个具体例子,大家自己去体会。[/b]
[b]eg[/b]
public[b] class Person
{
//定义一个实例属性
public String name;
//定义一个类属性
public static int eyeNum;
}
public class TestPerson
{
public static void main(String[] args)
{
//Person类已经加载,则eyeNum变量起作用了,输出0
System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
//创建Person对象
Person p = new Person();
//通过Person对象的引用p来访问Person对象name实例属性
//并通过实例访问eyeNum类属性
System.out.println("p变量的name属性值是:" + p.name
+ " p对象的eyeNum属性值是:" + p.eyeNum);
//直接为name实例属性赋值
p.name = "孙悟空";
//通过p访问eyeNum类属性,依然是访问Person的eyeNum属性
p.eyeNum = 2;
//再次通过Person对象来访问name实例属性和eyeNum类属性
System.out.println("p变量的name属性值是:" + p.name
+ " p对象的eyeNum属性值是:" + p.eyeNum);
//前面通过p修改了Person的eyeNum属性,此处的Person.eyeNum将输出2
System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
Person p2 = new Person();
//p2访问的eyeNum类属性依然引用Person类的,因此依然输出2
System.out.println("p2对象的eyeNum类属性值:" + p2.eyeNum);
}
}
[/b]
[b]主要要注意这里通过对象修改了类的属性。[/b][b]最后讲下局部变量可以覆盖全局变量,eg[/b]public class TestVariableOverride
{
//定义一个name实例属性
private String name = "李刚";
//定义一个price类属性
private static double price = 78.0;
//主方法,程序的入口
public static void main(String[] args)
{
//方法里的局部变量,局部变量覆盖成员变量
int price = 65;
//直接访问price变量,将输出price局部变量的值:65
System.out.println(price);
//使用类名来作为price变量的限定,将输出price类属性的值:78.0
System.out.println(TestVariableOverride.price);
//运行info方法
new TestVariableOverride().info();
}
public void info()
{
//方法里的局部变量,局部变量覆盖成员变量
String name = "孙悟空";
//直接访问name变量,将输出name局部变量的值:"孙悟空"
System.out.println(name);
//使用this来作为name变量的限定,将输出price实例属性的值:"李刚"
System.out.println(this.name);
}
}
[b]靠~~这章太厚了,我将分三天来分析,请待下回分解。[/b]
这章前部分讲了面向对象的基础,过于基础了,由于我学过别的面向对象语言c++,C#等也就没难度了,对于没学过的,还是要自己搞搞脑子的,光看懂也没用,要自己多尝试用面向对象的思想来思考问题。
书上讲了一个例子我们平时不注意的,先看代码
public class Dog
{
//定义一个jump方法
public void jump()
{
System.out.println("正在执行jump方法");
}
//定义一个run方法,run方法需要借助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 dog = new Dog();
//调用Dog对象的run方法
dog.run();
}
}
大家能说清main方法中共产生几个dog对象吗?
其实很简单用this就可以利用原本的对象不用自己再new个了,节省了系统开销,而且用原本的对象更符合面向对象的思想。
然后讲了类的方法,这个只要记住一点,java都是值传递的,没c++等语言中的引用传递。这样使编程的思路很清晰,方式多了人的思路就乱了。
还说了个jdk1.5后的特性支持形参长度可变的方法,eg
public class Varargs
{
//定义了形参个数可变的方法
public static void test(int a , String... books)
{
//books被当成数组处理
for (String tmp : books)
{
System.out.println(tmp);
}
//输出整数变量a的值
System.out.println(a);
}
public static void main(String[] args)
{
//调用test方法,为args参数可以传入多个的字符串
test(5 , "Struts2权威指南" , "基于J2EE的Ajax宝典");
//调用test方法,为args参数可以传入多个的字符串
test(23 , new String[]{"Ruby On Rails敏捷开发最佳实践" , "轻量级企业应用实战"});
}
}
这个还是挺方便的。当只能用在最后一个参数,导致使用面不广。使用数组来处理可变参数也是个好办法,他不限制位置。
[b]下一部分讲了成员变量和局部变量[/b]
[b]成员变量分为实例属性和类属性,类属性比实例属性范围大,下面看个具体例子,大家自己去体会。[/b]
[b]eg[/b]
public[b] class Person
{
//定义一个实例属性
public String name;
//定义一个类属性
public static int eyeNum;
}
public class TestPerson
{
public static void main(String[] args)
{
//Person类已经加载,则eyeNum变量起作用了,输出0
System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
//创建Person对象
Person p = new Person();
//通过Person对象的引用p来访问Person对象name实例属性
//并通过实例访问eyeNum类属性
System.out.println("p变量的name属性值是:" + p.name
+ " p对象的eyeNum属性值是:" + p.eyeNum);
//直接为name实例属性赋值
p.name = "孙悟空";
//通过p访问eyeNum类属性,依然是访问Person的eyeNum属性
p.eyeNum = 2;
//再次通过Person对象来访问name实例属性和eyeNum类属性
System.out.println("p变量的name属性值是:" + p.name
+ " p对象的eyeNum属性值是:" + p.eyeNum);
//前面通过p修改了Person的eyeNum属性,此处的Person.eyeNum将输出2
System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
Person p2 = new Person();
//p2访问的eyeNum类属性依然引用Person类的,因此依然输出2
System.out.println("p2对象的eyeNum类属性值:" + p2.eyeNum);
}
}
[/b]
[b]主要要注意这里通过对象修改了类的属性。[/b][b]最后讲下局部变量可以覆盖全局变量,eg[/b]public class TestVariableOverride
{
//定义一个name实例属性
private String name = "李刚";
//定义一个price类属性
private static double price = 78.0;
//主方法,程序的入口
public static void main(String[] args)
{
//方法里的局部变量,局部变量覆盖成员变量
int price = 65;
//直接访问price变量,将输出price局部变量的值:65
System.out.println(price);
//使用类名来作为price变量的限定,将输出price类属性的值:78.0
System.out.println(TestVariableOverride.price);
//运行info方法
new TestVariableOverride().info();
}
public void info()
{
//方法里的局部变量,局部变量覆盖成员变量
String name = "孙悟空";
//直接访问name变量,将输出name局部变量的值:"孙悟空"
System.out.println(name);
//使用this来作为name变量的限定,将输出price实例属性的值:"李刚"
System.out.println(this.name);
}
}
[b]靠~~这章太厚了,我将分三天来分析,请待下回分解。[/b]
相关文章推荐
- 第五章 面向对象的编程风格(面向对象编程概念)
- Java第五章 面向对象
- Java 讲义 第五章 面向对象(上)
- 疯狂JAVA讲义---第五章(下):面向对象
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --类的结构和实现
- 《疯狂Java讲义》读书笔记——面向对象(下)
- 《疯狂Java讲义(第3版)》.(李刚)——面向对象及UML
- 第五章 对象和面向对象
- 第五章 面向对象的编程风格(面向对象的编程思维)
- 第五章 面向对象(中)
- 第五章 面向对象
- [李景山php] 深入理解PHP内核[读书笔记]--第五章:类和面向对象 --访问控制的实现
- 第五章:面向对象
- Java基础知识学习之路-06-第五章-面向对象(上)
- php面向对象视频笔记之第五章(错误和异常处理)
- JavaScript 中级笔记 第五章 面向对象的基础
- javascript 面向对象精要 第五章 继承
- 第五章—面向对象(上)
- FKJAVA读书笔记--第五章--面向对象(上)