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

Java基础之(二) 类与对象

2016-07-02 17:38 387 查看

说明

类可被认为是一种自定义的数据类型,可以使用类来定义变量,这种类型的变量统称为引用变量,它们将会引用到类的对象。

定义类

面向对象的程序设计过程中有两个重要概念:类与对象(也被称为实例)。类是对象的抽象,对象是类的实例。



标准的命名规则为:类名是以大写字母开头的名词。若名字由多个单词组成,每个单词的第一个字母都应该大写。

class Person{
int age;
void shout(){
System.out.println("oh my god!i'm"+ age);
}
}


age是类的属性,也叫类成员变量;

shout是类的方法,也叫类成员函数;

对一个类定义而言,可以包含三种最常见的成员:构造器、Filed和方法。

Filed用于定义该类或该类的实例所包含的状态数据。

方法则用于定义该类或该类的实例的行为特征或者功能实现。

构造器用于构造该类的实例。

定义Field的语法格式如下:

[修饰符] Field类型 Field名 [=默认值];


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

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

Field名:任一合法标识符即可,但从程序可读性来讲,应由一个或多个有意义的单词组成。

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

[修饰符] 方法返回值类型 方法名(形参列表)
{
方法体
}


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

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

方法名:任一合法标识符即可,但从程序可读性来讲,应由一个或多个有意义的单词组成。

形参列表:形参列表用于定义该方法可以接受的参数

static是一个特殊的关键字,它可以用于修饰Field、方法等成员。static修饰的成员表明它属于这个类本身,而不属于该类的单个实例,因此通常把static修饰的变量和方法称之为类变量和类方法。

关于static关键字,以后会介绍到。

构造器是一个特殊的方法,定义构造器的语法格式如下:

[修饰符] 构造器名(形参列表)
{
可执行体
}


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

构造器名:构造器名必须与类名相同。

形参列表:形参列表用于定义该方法可以接受的参数

值得注意的是构造器不能指定返回值类型,也不能用void声明构造器没有返回值。

下面程序将定义一个Person类:

class Person{
//下面将定义两个Field
public String name;
private int age;
//下面定义一个方法
void shout(String context){
System.out.println("oh my god");
}
}


上面的程序没有定义构造器是因为系统已经自动为这个类生成了一个默认的无参构造器。

问题:一个类中可不可以有2个公共的方法?

答案:可以。Java中对公共方法的个数没有约束,但是对公共的类有约束,一个Java源文件中只能定义一个public类型的类。

对象

说明

现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。

拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。

对比现实对象和软件对象,它们之间十分相似。

软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。

在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

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

生成对象



下面程序将生成一个对象:

//定义一个Person类型的变量
Person p;
//通过new关键字调用Person类的构造函数,返回一个Person实例
//将该Person实例赋给p变量
p = new Person();


上述代码也可简化为如下:

//定义p变量的同时并为p变量赋值
Person p = new Person();


如果访问权限允许,类里定义的方法和Field都可以通过类或实例来调用;没有使用static关键字修饰的方法和Field只能用实例调用。调用的语法格式如图所示:



下面的程序演示了对象的使用方法:

class Dog{
//定义三个Field
String name;
int age;
String color;
//定义一个void返回值方法
void jump(){
System.out.println("jump");
}
}

class DogTest{
public static void main(String args[]){
//生成对象并为对象赋值
Dog d  = new Dog();
//调用d的name Field,直接为该Field赋值
d.name  = "旺财";
d.age = 2;
d.color = "black";
//调用d的jump方法
d.jump();
}
}


一个类可以包含以下几种类型变量:

刚刚我们有提到类变量的概念。这里说一下局部变量成员变量类变量

局部变量: 在方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

成员变量: 成员变量是定义在类中、方法体之外的变量。这种变量在创建对象的时候实例化(分配内存)。成员变量可以被类中的方法和特定类的语句访问。

类变量是在一个类中声明,任何方法之外的变量,用static关键字。

在Java代码中,有两种方式可以创建对象。

其中比较直观的一种,也就是通常所说的显式对象创建,就是通过new关键字来调用一个类的构造函数,通过构造函数来创建一个对象,这种方式在java规范中被称为“由执行类实例创建表达式而引起的对象创建”。

当然,除了显式地创建对象,以下的几种行为也会引起对象的创建,但是并不是通过new关键字来完成的,因此被称作隐式对象创建,他们分别是:

加载一个包含String字面量的类或者接口会引起一个新的String对象被创建,除非包含相同字面量的String对象已经存在与虚拟机内了(JVM会在内存中会为所有碰到String字面量维护一份列表,程序中使用的相同字面量都会指向同一个String对象),比如:

class StringLiteral {
private String str = "literal";
private static String sstr = "s_literal";
}


自动装箱机制,把一个基本类型变量直接赋给对应的包装类变量或者Object类变量。比如:

class PrimitiveWrapper {
private Integer i = 1;
private Object boolObj = true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: