定义类
类:class 对象:object 也称作实例,instance。
对象是一个具体的实体,类是一组这样实体。
类的基本格式
【修饰符】 class 类名{
构造器定义
成员变量
方法
}
定义成员变量
【修饰符】 类型 变量名 = 默认值;
修饰符:可以省略,可以是(public ,protected,private,static, final)其中public,protected,private三个只能出现一个,可以与static,final组合修饰。
定义方法
【修饰符】 方法返回值类型 方法名(形参列表) { }
修饰符:可以省略,可以是(public ,protected,private,static, final,abstract)其中public,protected,private三个只能出现一个,abstract和final只能出现其一,可以与static组合修饰。
方法返回值类型:如果声明了方法返回值类型,必须加return语句,返回一个变量或者表达式,变量或者表达式的类型与声明类型匹配。如果没有返回值,必须用void声明没有返回值。
static 【静态】
static可以用于修饰成员变量和方法,static修饰的成员表示它属于这个类本身,而不是类的一个实例。
所以通常static修饰的成员和方法称为类变量,类方法。
不用static修饰的方法和成员属于该类的单个实例,而不属于该类,通常称为实例变量,实例方法。
static为静态的意思,所以有时称为静态成员,静态方法。不使用static修饰的成员变量和方法称为非静态成员,非静态方法。
静态成员不能直接访问非静态成员。
static的作用
用于区分成员变量,方法,内部类,初始化块。
static相当于一个标志,有static修饰的成员属于类本身,没有static修饰的成员变量属于该类的实例。
构造器
构造器是一个特殊的方法,语法格式与定义方法的格式很像。
【修饰符】 构造器名(形参列表){
可执行语句组成构造体
}
修饰符:可以省略,或者public,protected,private其中之一
构造器名必须与类名相同
形参列表:与定义方法的形参列表格式完全相同。
构造器不能定义返回值类型,不能使用void声明构造器没有返回值。如果构造器定义了返回值类型或者使用了void,编译不会出错,但会当做方法处理,就不再是构造器了。
定义一个Person类
public class Person
{
// 下面定义了两个成员变量
public String name;
public int age;
// 下面定义了一个say方法
public void say(String content)
{
System.out.println(content);
}
}
没有构造器,系统提供默认的构造器,默认构造器没有参数
接下来使用该类,java的类功能有如下作用:
--定义变量
--创建对象
--调用类的类方法或访问类的类变量。
对象的创建和使用
// 使用Peron类定义一个Person类型的变量
Person p;
// 通过new关键字调用Person类的构造器,返回一个Person实例,
// 将该Person实例赋给p变量。
p = new Person();
也可以直接简写:Person p = new Person();
接下来使用对象,对象的功能如下:
--访问对象的实例变量
--调用对象的方法
// 访问p的name实例变量,直接为该变量赋值。
p.name = "李刚";
// 调用p的say方法,声明say()方法时定义了一个形参,
// 调用该方法必须为形参指定一个值
p.say("学习很容易!");
// 直接输出p的name实例变量,将输出 李刚
System.out.println(p.name);
引用:
实际上Person p只是引用变量,在内存中只是一个引导,指向堆内存里的对象(name,age)
当一个对象创建成功后,这个对象保存在堆内存中,java程序不容许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。
不管对象还是数据,当程序访问引用变量(p)的成员或方法时,实际上是访问该引用变量所引用的数组,对象的成员变量或方法。
对象的this引用
this可以代表任何对象,谁在调用,this就代表谁。
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方法");
}
}
一个类中有2个方法,在run方法中调用jump方法,可以直接创建类的对象,对象然后调用jump方法。
其实可以这样写
public void run()
{
// 使用this引用调用run()方法的对象
this.jump();
System.out.println("正在执行run方法");
}
或者直接写jump();也可以
static修饰的方法不能用this,所以static修饰的方法不能访问其他普通成员,所以java语法规定:静态成员不能直接访问非静态成员。
如果真的需要在静态方法中访问普通方法,可以重新创建对象
new StaticAccesNonStatic().info();
如下:
public class ThisInConstructor
{
// 定义一个名为foo的成员变量
public int foo;
public ThisInConstructor()
{
// 在构造器里定义一个foo变量
int foo = 0;
// 使用this代表该构造器正在初始化的对象
// 下面的代码将会把该构造器正在初始化的对象的foo成员变量设为6。
this.foo = 6;
}
public static void main(String[] args)
{
System.out.println(new ThisInConstructor().foo);
}
}
结果输出为:6
return 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()
System.out.println("rt的age成员变量值是:" + rt.age);
}
}
输出结果为:1