public
和final
中的一个,或者不要也可以。static
修饰的成员不能访问没有static
修饰的成员new
关键字来调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此,Java语言提供了一个功能:如果程序没有为类编写构造器,则系统会为该类提供一个默认的构造器\quad 以上几条介绍了类的组成的基本情况。接下来介绍类里面3大基本成员的具体语法格式
\quad 属性用于定义类或类的实例中所包含的数据,其语法格式如下:
[修饰符] 属性类型 属性名 [=默认值]
public, protected, private, static, final
,其中public, protected, private
三个最多只能出现一个,可以与static, final
组合起来修饰属性。例如public int a = 0;
protected double f;
float e = 1.0;
public static int d = 2;
\quad 属性是一种比较传统、也比较符合汉语习惯的说法,在Java官方说法里面,属性被称为Field
,因此有的地方也将属性翻译为字段
\quad 定义方法的语法格式如下:
[修饰符] 方法返回值类型 方法名(形参列表)
{
// 由0条到多条可执行语句组成的方法体
}
public, protected, private, static, final
,其中public, protected, private
三个最多只能出现一个,可以与static, final
组合起来修饰属性。例如public static void main(String[] args)
static int getMax(int a, int b)
private float getMax(float a, float b)
return
语句返回一个变量或者表达式,且这个变量或者表达式的类型必须与方法声明的类型匹配。若一个方法没有返回值,则须使用void
来声明,
隔开 \quad static
是一个特殊的关键字,它可以用于修饰方法、属性等成员。static
修饰的成员表明它是这个类共有的,而不是属于该类的某个实例,因此通常把static
修饰的属性和方法也称为类属性、类方法;不适用其修饰的方法和属性称为实例属性和实例方法。
\quad 构造器语法格式如下:
[修饰符] 构造器名(形参列表)
{
// 由0条到多条可执行语句组成的构造器执行体
}
public, protected, private
中的一个 \quad 需注意:构造器不能定义返回值类型声明,也不能使用void
定义构造器没有返回值。
\quad 以上,我们就介绍完了Java中类的定义,都是文字不易理解,接下来我们通过简单的程序例子进行讲解。
\quad 首先我们定义一个Person
类:
public class Person {
public int age;
public double height;
public void info()
{
System.out.println("我的年龄是: " + age + ", 我的身高是: " + height);
}
}
\quad 显然,这个类不含构造函数,则系统会给他提供一个默认的构造函数,系统提供的构造函数是没有参数的。调用的时候使用new
关键字,这样调用即可:
Person Cheng = new Person();
\quad static
修饰的方法或属性,既可以通过类来调用,也可以通过实例来调用,没有使用static
修饰的方法或属性,则只能通过实例调用。上面的程序中属性和方法均没有用static
修饰,我们可以用Cheng
这个实例来调用:
Person Cheng = new Person();
Cheng.age = 23;
Cheng.height = 172.0;
Cheng.info();
\quad 运行这个程序,就可以得到如下输出:
我的年龄是: 23, 我的身高是: 172.0
\quad Java提供了一个this
关键字,是一个对象的默认引用,this
关键字总指向调用该方法的对象。根据this
出现的位置不同,分为两种情形:
this
public class Person {
public int age;
public double height;
public Person(int age, int height)
{
this.age = age;
this.height = height;
}
public void info()
{
System.out.println("我的年龄是: " + age + ", 我的身高是: " + height);
}
}
在调用的时候,可以在构造函数内直接传入age
和height
值进行初始化,下面即为其调用示例:
Person Cheng = new Person(22, 172);
Cheng.info();
this
public class Person {
public int age;
public double height;
public Person(int age, int height)
{
this.age = age;
this.height = height;
}
public void info()
{
System.out.println("我的年龄是: " + age + ", 我的身高是: " + height);
}
public void say()
{
this.info();
System.out.println("这就是我");
}
}
上述程序在say
方法内调用info
方法,这种情况下直接使用this
即可,而不需要通过创建对象再调用info
方法,这样的话可以避免重复创建同一对象,且写法更简洁。
\quad 在现实世界里,对象的一个方法依赖于另一个方法的情况很常见,因此,Java允许对象的一个成员直接调用另一个成员,可以省略this
,即上述程序中say
方法中省略this
也是可以的。
\quad 对于static
修饰的方法而言,则可以直接使用类来直接调用该方法。如果在static
修饰的方法中使用this
关键字,则这个关键字就无法指向合适的对象,所以,static
修饰的方法中不能使用this
引用。由于static
修饰方法中不能使用this
引用,所以static
修饰方法中不能访问不适用static
修饰的普通成员,例如面的程序就会出错:
public class test {
public void info()
{
System.out.println("测试下啦~");
}
public static void main(String[] args){
info();
}
}
\quad 如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。
public class test {
public void info()
{
System.out.println("测试下啦~");
}
public static void main(String[] args){
test t = new test();
t.info();
}
}
\quad 当this
作为对象的默认引用使用时,程序可以像访问普通引用变量一样来访问这个this
引用,甚至可以把this
当成普通方法的返回值,如下程序:
public class test {
public int age = 20;
public test grow()
{
age++;
return this;
}
public static void main(String[] args){
test t = new test();
t.grow().grow().grow();
System.out.println("我现在已经"+ t.age + "岁啦~");
}
}
我现在已经23岁啦~