类的定义:
- 类是相同或相似对象的一种抽象,是对象的一个模板,它描述一类对象的行为和状态。
- 类是具有相同属性和方法(行为)的对象的集合
定义一个类,主要有三个步骤:
1、定义类名,用于区分不同的类。如下代码中 public class
后面跟的就是类名。class
是声明类的关键字,类名后面跟上大括号,大括号里面就是类的一些信息。public
为权限修饰符。
public class 类名 {
//定义属性部分(成员变量)
属性1的类型 属性1; 属性2的类型 属性2; ... //定义方法部分 方法1 方法2 ... }
2、编写类的属性。对象有什么,需要通过属性来表示。属性的定义是写在类名后面的大括号里,在定义属性时,要明确属性的类型。在一个类当中可以写一个或多个属性。当然也可以不定义属性。
3、编写类的方法。方法也是写在大括号里面。可以定义一个方法或多个方法,当然也可以不定义方法
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:也叫静态变量,类变量也声明在类中,方法体之外,但必须声明为
static
类型。
创建对象的语法如下:
类名 对象名 = new 类名();
定义类的时候不会为类开辟内存空间,但是一旦创建了对象,系统就会在内存中为对象开辟一块空间,用来存放对象的属性值和方法。
创建对象后,我们就要使用对象了,使用对象无非就是对属性和方法进行操作和调用。语法如下
//引用对象属性
对象名.属性
//引用对象方法
对象名.方法
构造方法
在面向对象中有一个非常重要的知识点,就是构造方法。每个类都有构造方法,在创建该类的对象的时候他们将被调用,如果没有定义构造方法,Java 编译器会提供一个默认构造方法。 创建一个对象的时候,至少调用一个构造方法。比如在新建一个对象 new Object()
,括号中没有任何参数,代表调用一个无参构造方法(默认构造方法就是一个无参构造方法)。构造方法的名称必须与类名相同,一个类可以定义多个构造方法。
构造方法的具体内容:
1、构造方法的名称与类名相同,且没有返回值。它的语法格式如下:
//与类同名,可以指定参数,没有返回值
public 构造方法名(){
//初始化代码
}
下面是一个构造方法的例子:
public class People{
//无参构造方法 public People(){ } //有一个参数的构造方法 public People(int age){ } }
又例如具体的构造方法:
public class People {
//属性(成员变量)有什么 double height; //身高 int age; //年龄 int sex; //性别,0为男性,非0为女性 //构造函数,初始化了所有属性 public People(double h, int a, int s){ height = h; age = a; sex = s; } }
//创建对象,调用我们自己定义的有参构造方法
People XiaoMing = new People(168, 21, 1);
上面的例子中通过 new
关键字将类实例化成对象,而 new
后面跟的就是构造方法。于是可以知道 new + 构造方法
可以创建一个新的对象。
2、如果在定义类的时候没有写构造方法,系统会默认生成一个无参构造方法,这个构造方法什么也不会做。
3、当有指定的构造方法时,系统都不会再添加无参构造方法了。
4、构造方法的重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法。
静态成员
Java 中被 static
修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。
如:
public class StaticTest{
public static String string="shiyanlou"; public static void main(String[] args){ //静态成员不需要实例化 直接就可以访问 System.out.println(StaticTest.string); //如果不加static关键字 需要这样访问 StaticTest staticTest=new StaticTest(); System.out.println(staticTest.string); //如果加上static关键字,上面的两种方法都可以使用 } }
静态方法
被 static
修饰的方法是静态方法,静态方法不依赖于对象,不需要将类实例化便可以调用,由于不实例化也可以调用,所以不能有 this
,也不能访问非静态成员变量和非静态方法。但是非静态成员变量和非静态方法可以访问静态方法。