(新手创作,如有哪里表示不对,欢迎各位读者大大们指出o.o)
目录
一、类是什么
像如c语言函数一样,类是java源文件最重要的组成部分,一个源文件由一个或多个类组成,但是有且只有一个主类,主类名需和java源文件名相同,取名格式为合法的java标识符,其中有以下要求:
1.如果类名使用拉丁字母,首字母应当大写,例如Hello、Bye等;
2、类名应当意思清晰,见名知意。当类名由几个单词组成时,每个单词首字母应当大写,例如:MyFamily、PlayFootball等。
(1)类的声明
要使用类,应当先定义类,类的定义分为两部分:类声明和类体,基本格式为:
class 类名{//class为关键字,用来声明类
类体
}
(2)类体
类体由变量和方法组成,变量又分为成员变量和局部变量,(成员变量又可细分为类变量和实例变量,这里不细讲),方法和C语言函数相似(区别在于方法在类中定义声明,而函数不能在函数中定义)。
【1】成员变量
成员变量是指在类中但不在方法中声明的变量,成员变量可以是java中任何一种数据类型,例如
class Test{
boolean male;
byte b;
int c;
float d;
double e;
char f;
}
除了这些基本类型,还包含引用类型:数组、对象和接口。
成员变量如果你没有初始化,Java编译器会自动会为其指定默认值,其中常见的int型为0,char型为‘\0’,浮点型型为0.0。成员变量在类中每个地方都有效,与它在哪个位置无关;
【2】局部变量
局部变量又叫域变量,顾名思义,就是只在某个区域内存在有效的变量,在方法中声明的变量就是局部变量,与成员变量不同,Java编译器不会给其加上默认值,如果运行时没有赋予局部变量初始值,可能会导致编译失败,例如:
class Test{
void main(){
int b;//声明一个局部变量b,不赋予初始值
System.out.println(b);//显示编译错误,b没有初始值
}
}
局部变量命名时尽量不要与成员变量重名,如果重名,会优先使用局部变量
class Test{
int a=10;//声明成员变量a
int main(}{
int a=5;//声明局部变量a,优先使用局部变量a
System.out.println(a);//所以这里会打印除局部变量a,打印结果为5
}
}
在成员变量和局部变量重名的情况下,如果在方法中想重新使用成员变量,应当在变量名前加一个this.
class Test{
int a=10;//声明成员变量a
int main(}{
int a=5;//声明局部变量a,优先使用局部变量a
System.out.println(this.a);//因为在a前加了一个this.,所以这里是成员变量a,打印结果为10
}
}
【3】方法
方法分为实例方法、类方法以及构造方法(这里只讲实例方法与构造方法),方法由方法头和方法体组成:
方法类型 方法名(){
方法体
}
例如:
void java(){//void为java()方法的类型,()中存放形参也可以无参
int a;
System.out.println(a);//由{}括起来的部分为方法体
}
该例子为一个实例方法,其中,void类型的变量不需要返回值给方法,但是其他类型的方法必须要有return语句。
而构造方法类中的一种特殊方法,当程序需要创建对象时,就要用到构造方法,构造方法没有类型,方法名必须与它所在的类名一致,其他写法与实例方法一致,一个类中可以有若干个构造方法,但是必须保证它们的参数不同,这里的参数不同要满足以下条件之一:
1.参数个数不同;
2.如果参数个数相同,则必须要保证至少有一个参数的类型不同。
如果你没有编写构造方法额,则程序会自动默认该类有一个构造方法,但不会显示,格式例如
Test(){//假设该类的类名为Test,程序默认的构造方法
}
二、对象
上文我们介绍了类,类中的变量以及方法可以看做是该类的基本属性,但是类是一个面向对象的一种数据类型,创建对象,其实就是以类为模版,创建一个实例分配类中的基本属性,用实例来引用类中的变量和方法。
对象的创建包括:声明对象和为声明的对象分配变量
(1)对象的声明
一般格式为
类的名字 对象的名字
例如:
Test test//Test为类名,test为对象名
实际上,上面的写法并不是对对象的声明,而是对对象的引用声明,对象的引用相似于C语言的指针,是指向于对象,如果只是声明对象的引用,对象引用并不知道要引用哪个对象,就像绳子不知道绑哪个气球。
(2)为声明的对象分配变量
使用new操作符和类的构造方法为声明的对象分配变量,程序会开辟内存给对象储存变量,例如:
Test test=new Test();
但如果只是创建了对象并分配给了变量而没有赋值给对象引用,虽然对象客观存在,但是对象引用无法引用该对象,除非把对象赋值给对象引用。
new Test();
//创建了一个Test类的对象,但是并不知道对象的引用,虽然客观存在该对象,但无法引用该对象