类是组成java程序的基本要素,类封装了一类对象状态和方法,类是用来定义对象的模板。
类
1. 类的定义:同过class关键字来定义一个类(一个类中只能有一个pulic类)、
格式:
class 类名{
属性;
方法;
}
2. 类体:写类的目的是为了描述(抽象)一类事物共有的属性和功能,描述过程中类体来实现。{ }里面的内容称之为类体的内容。
变量
1. 成员变量和局部变量:类体分为两部分,变量的声明和方法的定义。在变量声明部分声明的变量被称为类的成员变量,在该类中有效。在方法体中声明的变量和方法的参数称为成员局部变量,仅在该方法体中有效。
public class Phone(){
int id; //成员变量,在类中有效。
void call(){
int number; //局部变量,在call方法体中有效。
}
}
2. 实例变量和类变量:成员变量又分为实例变量和类变量。在声明成员变量时,用关键字static给予修饰的变量称之为类变量,否则称之为实例变量。实例变量在通过创建对象时才会分配内存,而类变量在该类被加载到内存时,就分配了相应的内存空间。实例变量创建对象的时候会为他在对内存中开辟一个空间来存储,而且为他的属性赋予相对的默认值,每个创建的对象的内存都不相同。而类变量无论创建多少个对象类变量分配的地址都处于同一个内存,改变某个对象的一个类变量都会影响其他的对象,也就是说,对象共享类变量。
int i; //实例变量
static i; //类变量
3. 成员变量的隐藏:如果成员变量与某个方法里的局部变量的名字相同,则会按照就近原则,该方法隐藏成员变量,在该方法里面成员变量会暂时失效。如果在该类中使用被隐藏的成员变量,则需要使用this关键字。
class Tom(){
int x;
void f(int x){
intx=100; //该x是属于该方法局部变量。
this.x=100; //只能用this关键字来说明这是属于当前类的属性。
}
}
方法
一个类的类体由两个部分组成,即变量的声明和方法的定义。
1. 方法声明:最基本的的方法声明包括方法名和方法返回类型组成。
float area(){ //float为返回类型,area为方法名
}
返回类型:方法的返回类型可以是任意的java基本数据类型包括String,当一个方法不需要返回类型必须是void。
2. 方法参数:方法的参数也叫形式参数,只在该方法内有效,用于接收对象传过来的实际参数,创建对象会存放在栈内存,使用后会被java的垃圾回收机制销毁。
void test(int I,int b){ //形式参数,只在该方法有效,可以是任意基本数据类//型,和对象,定义多个参数用 , 分隔。
system.out.print(i);
}
3. 方法的重载:
3.1 java中存在两种状态,即重载(overload)和重写(override),重写是和继承有关的多态。
3.2 方法的重载是多态性的一种,所谓多态性是指可以向功能传递不同的消息,以便让对象根据相应的消息来产生相应的行为。对象的功能通过类中的方法来体现,那么功能的多态性就是方法重载。方法重载的意思是,一个类中可以由多个方法具有相同的名字,但这些方法的参数必须不同,或者是参数的类型不同。
class Area{
float count(floatx, float a){ //count方法
returnx+a;
}
double count(doublex, double a){ //count方法的重载,方法名一样,参数//类型不一样
returnx+a;
}
}
4. 构造方法:构造方法是一种特殊的方法,他的名字必须与它所在的类完全相同,而且没有参数类型,构造方法也可以重载。没有手动创建构造的时候,java会默认提供一个空的无参构造器。
5. 类方法和实例方法:没有用static定义的方法都为实例方法。实例变量不能再类方法里面使用。因为static比其实例变量先加载。
class Test(){
static intx=0;
int y = 0;
static voidprint(){
System.out.print(x); //合法
System.out.print(y); //非法,类方法不能调用实例属性。
}
}
6. toString():toString是Obeject的方法,因为所有类都默认继承Obeject类,所以类也具有该方法,默认隐藏和自动调用。手动编写属于重写toString()。