java面向对象详细GO(一)

昨天小编简单的介绍了一下java面向对象的内容,现在让我们go,go,go!

java面向对象详细GO(一)

1.1 类和对象

1.1.1 定义类

类和对象是面向对象的核心。Java语言定义类的简单语法如下:

【修饰符】 class 类名

{

零到多个构造器定义····

零到多个Field····

零到多个方法····

}

修饰符可以是public、final、abstract,或者完全省略这三个修饰符。类名只要是一个合法的标识符即可。

对于一个类而言可以包含三种最常见的成员:构造器、Field和方法,三种成员都可以定义零个或多个,如果三种成员都只定义零个,就是定义了一个空类,无实际意义。

定义Field的语法格式如下:

【修饰符】Field类型 Field名{=默认值}

Field语法格式的详细说明如下:

◆ 修饰符:修饰符可以省略,也可以是public、protected、private、static、final。其中public、protect、private三个只能出现一个,可以和static、final组合起来修饰Field。

◆ Field类型:Field类型可以是Java语言允许的任何数据类型,包括基本类型和引用类型。

◆ 默认值:定义Field还可以指定一个可选默认值。

定义方法的语法格式如下:

【修饰符】 方法返回值类型 方法名(形参列表)

{

//由零条到多条可执行性语句组成的方法体

}

方法语法格式的详细说明如下:

◆ 修饰符:修饰符可以省略,也可以是public、protected、private、static、final、abstract。其中public、protect、private三个只能出现一个,abstract和final只能出现一个,可以和static组合起来修饰方法。

◆ 方法返回值类型:可以是Java语言允许的任何数据类型,包括基本类型和引用类型。如果声明了方法返回值类型,则方法体内必须有一个有效的return语句。该语句返回一个变量或一个表达式,这个变量或表达式的类型必须与此处声明的类型匹配。

◆ 形参列表:形参列表用于定义该方法可以接受的参数,多个参数由英文逗号(,)隔开。

定义构造器的语法格式如下:

【修饰符】构造器名(形参列表)

{

//由零条到多条可执行性语句组成的构造器执行体

}

构造器语法格式的详细说明:

◆ 修饰符:修饰符可以省略,也可以是public、protected、private其中之一。

◆ 构造器名:构造器名必须和类名相同。

◆ 形参列表:和定义方法形参列表的格式完全相同。

eg:定义一个Person类

public class Person

{

//下面定义两个Field

public String name;

public int age;

//下面定义一个say方法

public void say(String content)

{

System.out.println(content);

}

}

1.1.2 对象的产生和使用

创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器可以创建这个类的实例。

//定义一个Person类型的变量

Person p;

//通过new关键字调用Person类的构造器返回一个Person实例,将该Person实例赋给p变量

p=new Person();

也可以简写为:

Person p=new Person();

下面代码中通过Person实例来调用Person的Field和方法:

//调用p的name Field,直接为该Field赋值

p.name = "李刚";

//调用p的say方法,声明say方法时定义了一个形参,调用该方法必须为形参指定一个值

p.say("Java语言很简单!");

System.out.println(p.name);

1.1.3 对象的this引用

Java提供了一个this关键字,this关键字总是指向调用该方法的对象。根据this出现的位置不同,有以下两种情形:

◆ 构造器中引用该构造器正在初始化的对象

◆ 在方法中引用强调该方法的对象

this关键字最大的作用就是让类中的一个方法,访问该类里的另一个方法或Field.

public class Dog

{

//定义一个jump方法

public void jump()

{

System.out.println("正在执行jump方法");

}

//定义一个run方法,run方法需要借助jump方法

public void run()

{

Dog d=new Dog();

d.jump();

System.out.println("正在执行run方法");

}

}

使用这种方法来定义Dog类,确实可以实现在run方法中调用jump方法,但是不够好

public class DogTest

{

public static void main(String[] args)

{

//创建Dog对象

Dog dog=new Dog();

//调用Dog对象的run方法

dog.run();

}

}

下面演示一下静态方法直接访问非静态方法时引发的错误。

public class StaticAccessNonStic

{

public void info()

{

System.out.println("简单的info方法");

}

public static void main(String[] args)

{

//因为main方法是静态方法,而info是非静态方法,调用main方法的是该类本身,而不是该类的实例,因此省略的this无法指向有效的对象

info();

}

}

上面的main方法中直接调用info方法时,系统相当于使用this作为该方法的调用者,而main方法是一个static修饰的方法,static修饰的方法属于类,不属于对象,所以调用static修饰的方法的主调是类本身。如果允许在static修饰的方法中出现this引用,那将导致this无法引用有效的对象,因此上面程序出现编译错误。

如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象:

//new StaticAccessNonStatic().info();

除此之外,this引用也可以用于构造器中作为默认引用,由于构造器是直接使用new关键字来调用,而不是使用对象来调用的,所以this在构造器中引用的是该构造器进行初始化的对象。

public class ThisInConstructor

{

//定义一个名为foo的Field

public int foo;

public ThisInConstructor()

{

//在构造器里定义一个foo变量

int foo=0;

//使用this代表此构造器进行初始化的对象,下面的代码将会把刚创建对象的foo Field设置为6

this.foo=6;

}

public static void main(String[] args)

{

//所有使用ThisInConstructor创建的对象的foo Field,都将被设为6,所以代码将输出6

System.out.println(new ThisInConstructor().foo);

}

}

当this作为对象的默认引用使用时,程序可以像访问普通引用变量一样来访问这个this引用,甚至可以把this当成普通方法的返回值。

public class ReturnThis

{

public int age;

public ReturnThis grow()

{

age++;

//return this,返回调用该方法的对象

return this;

}

public static void main(String[] args)

{

ReturnThis rt=new ReturnThis();

//可以连续调用同一个方法

rt.grow().grow().grow();

System.out.println("rt的age Field值是:“+ rt.age“");

}

}

使用this作为方法的返回值可以让代码更加简洁,但可能造成实际意义的模糊。

java面向对象详细GO(一)

明天继续!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值