您的位置:首页 > 编程语言 > Java开发

Java自学笔记之面向对象思想

2008-05-06 12:48 447 查看
面向对象的三大特征
封装 (Encapsulation)
继承 (Inheritance)
多态 (Polymorphism)

===================================Start 1=================================
class Person{
int age;
void shout(){
//int age = 60;成员变量隐藏
System.out.println("Mys age is "+age);
}
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
//p1.age = -30;
p1.shout();
p2.shout();

String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1==str2){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1.equals(str2)){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1==str3){
System.out.println("true");
}else{
System.out.println("false");
}

getSomeOne(p1);
getSomeOne(p2);
getSomeOne(new Person());//传值时常用
}
public static void getSomeOne(Person p){
p.shout();
}
}
/*
result:
Mys age is 0
Mys age is 0
false
true
true
Mys age is 0
Mys age is 0
Mys age is 0
*/
================================End 1=================================

================================Start 2===============================
class Person{
private int age;
void shout(){
//int age = 60;成员变量隐藏
System.out.println("Mys age is "+age);
}
}
class TestPerson{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1.age = -30;//提示为Person中私有
p1.shout();
p2.shout();

String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1==str2){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1.equals(str2)){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1==str3){
System.out.println("true");
}else{
System.out.println("false");
}

getSomeOne(p1);
getSomeOne(p2);
getSomeOne(new Person());
}
public static void getSomeOne(Person p){
p.shout();
}
}
================================End 2====================================

================================Start 3==================================
class Person{
private int age;
void shout(){
//int age = 60;成员变量隐藏
System.out.println("Mys age is "+age);
}
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1.age = -30;//提示为Person中私有
p1.shout();
p2.shout();

String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1==str2){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1.equals(str2)){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1==str3){
System.out.println("true");
}else{
System.out.println("false");
}

getSomeOne(p1);
getSomeOne(p2);
getSomeOne(new Person());
}
public static void getSomeOne(Person p){
p.shout();
}
}
class TestPerson{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
//p1.age = -30;//提示为Person中私有
p1.shout();
p2.shout();

String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1==str2){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1.equals(str2)){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1==str3){
System.out.println("true");
}else{
System.out.println("false");
}

getSomeOne(p1);
getSomeOne(p2);
getSomeOne(new Person());
}
public static void getSomeOne(Person p){
p.shout();
}
}
//哪个有“main”方法运行哪个
=================================End 3===================================

=================================Start 4=================================
class Person{
private int age;//封装
public void setAge(int age){
if(age<0)//可进行判断
return ;
this.age = age;
}
public int getAge(){
return this.age;
}
void shout(){
//int age = 60;成员变量隐藏
System.out.println("Mys age is "+age);
}
}
class TestPerson{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1.age = -30;//提示为Person中私有
p1.shout();
p2.shout();

/*String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1==str2){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1.equals(str2)){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1==str3){
System.out.println("true");
}else{
System.out.println("false");
}*/

/*getSomeOne(p1);
getSomeOne(p2);
getSomeOne(new Person());*/
}
/*public static void getSomeOne(Person p){
p.shout();
}*/
}
==================================End 4==================================

==================================Start 5================================
class Person{
private int age;
private String name;

public Person(){//我们不写构造方法,系统自动创建一个,但一但定义了构造系统将不再产生默认构造方法
}
public Person(int age){
age = age;//这样写编译运行没有问题,但结果不正确
}
public Person(String xname,int age){//这样写也可以,xname--name
name = xname;
//age = age;//这样写编译运行没有问题,但结果不正确
this.age = age;
}

public void setAge(int age){
if(age<0)//可进行判断
return ;
this.age = age;
}
public int getAge(){
return age;
}
void shout(){
//int age = 60;成员变量隐藏
System.out.println(name+"'s age is "+age);
}
}
class TestPerson{
public static void main(String[] args){
Person p1 = new Person(30);
Person p2 = new Person("zhoujiaoshou",20);
//p1.age = -30;//提示为Person中私有
p1.shout();
//p1.getAge();
p2.shout();
//p2.getAge();

/*String str1 = new String("abc");
String str2 = new String("abc");
String str3 = str1;
if(str1==str2){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1.equals(str2)){
System.out.println("true");
}else{
System.out.println("false");
}
if(str1==str3){
System.out.println("true");
}else{
System.out.println("false");
}*/

/*getSomeOne(p1);
getSomeOne(p2);*/
getSomeOne(new Person());//我们不写构造方法,系统自动创建一个,但一但定义了构造
//系统将不再产生默认构造方法,如果这时没有上面写的无参构造将出错
}
public static void getSomeOne(Person p){
p.shout();
}
}
result:
null's age is 0
zhoujiaoshou's age is 20
null's age is 0
================================End 5===================================

================================Start 6=================================
//演示"this"的用法
class Person{

private String name;

public Person(){
}
public Person(String name){
this.name = name;
}

public void fun1(){
System.out.println(name);
}
public void fun2(){
Person a2 = new Person("a2");
a2.fun1();
this.fun1();//这里也可以写成"fun1()",系统会进行识别
}
public static void main(String[] args){
Person a1 = new Person("a1");
a1.fun2();
}
}
result:
a2
a1

//this又一用法,构造方法中调用另一构造方法
class Person{

private String name;

public Person(){
System.out.println("被/"this/"调用");
}
public Person(String name){
this();//注意:this的又一用法
this.name = name;
}

public void fun1(){
System.out.println(name);
}
public void fun2(){
Person a2 = new Person("a2");
a2.fun1();
this.fun1();
}
public static void main(String[] args){
Person a1 = new Person("a1");
a1.fun2();
}
}
说明:this引用句柄的存放位置
每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象

this引用句柄的应用
一个类中的成员方法可以直接调用同类中的其他成员,其实我们在一个方法内部使用“this.其他成员”的引用方式和直接使用“其他成员”的效果是一样的,那this还有多大的作用呢?在有些情况下,我们还是非得用this关键字不可的 :
1. 让类的成员变量名和对其进行赋值的成员方法的形参变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的,老手看到函数的定义,就能揣摩出函数中的代码,大大节省了别人和自己日后阅读程序的时间。
2. 假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。
3. 构造方法是在产生对象时被java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。
=================================End 6==================================

=================================Start 7================================
//垃圾回收演示
class Person{

public Person(){
System.out.println("我被创建了!");
}
public void finalize(){
System.out.println("ZHOUJIAOSHOU我来收垃圾啦!");
}
public static void main(String[] args){
new Person();
new Person();
Person l=new Person();
l.finalize();
//System.gc();
}
}
/*
finalize
protected void finalize()
throws Throwable当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。
finalize 的常规协定是:当 JavaTM 虚拟机已确定尚未终止的任何线程无法再通过任何方法访问此对象时,将调用此方法,除非由于准备终止的其他某个对象或类的终结操作执行了某个操作。finalize 方法可以采取任何操作,其中包括再次使此对象对其他线程可用;不过,finalize 的主要目的是在不可撤消地丢弃对象之前执行清除操作。例如,表示输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接。

Object 类的 finalize 方法执行非特殊性操作;它仅执行一些常规返回。Object 的子类可以重写此定义。

Java 编程语言不保证哪个线程将调用某个给定对象的 finalize 方法。但可以保证在调用 finalize 时,调用 finalize 的线程将不会持有任何用户可见的同步锁定。如果 finalize 方法抛出未捕获的异常,那么该异常将被忽略,并且该对象的终结操作将终止。

在启用某个对象的 finalize 方法后,将不会执行进一步操作,直到 Java 虚拟机再次确定尚未终止的任何线程无法再通过任何方法访问此对象,其中包括由准备终止的其他对象或类执行的可能操作,在执行该操作时,对象可能被丢弃。

对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。

finalize 方法抛出的任何异常都会导致此对象的终结操作停止,但可以通过其他方法忽略它。

抛出:
Throwable - 此方法抛出的 Exception
*/
==================================End 7============0:37 2008-5-5========
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: