【Java 教程(原创)】018.类(下)
本帖最后由 零度非安全 于 2017-2-24 13:29 编辑点击图片穿越到 索引帖,听说有惊喜!
☟
在上一讲还有 3 个方法没讲到,那么这讲就这 3 个方法说明解决
分别是 构造方法、类方法以及实例方法
☠
构造方法
构造方法是一种特殊的方法
它的名字必须与它所在的类的名字完全相同
而且没有类型,构造方法也可以重载。
例如:
class 梯形{
float 上底,下底,高;
梯形(){ //构造方法
上底 = 60;
下底 = 100;
高 = 20;
}
梯形(float x,float y,float h){ //构造方法
上底 = x;
下底 = y;
高 = h;
}
}
当用类创建对象时,使用构造方法,下一讲非安全会讲到,不急哈!
类方法和实例方法
成员变量可分为实例变量和类变量,同样,类中的方法也可分为实例方法和类方法。
在声明方法时,方法类型前面不加关键字 static 修饰的实例方法,加 static 修饰的是类方法(静态方法)
例如:
class A{
int a;
float max(float x,float y){ //实例方法
.
.
.
}
static float jerry(){ //类方法
.
.
.
}
static void speak(String s){ //类方法
.
.
.
}
}
A 类中的 jerry 方法和 speak 方法是类方法,max 方法是实例方法。需要注意的是,static 需放在方法的类型的前
面。在学习过对象之后,鱼油即可知道实例方法和类方法区别。
几个值得注意的问题
对成员变量的操作只能放在方法中
方法可以对成员变量和该方法中声明的局部变量进行操作
在声明类的成员变量时可以同时赋予初值。
例如:
class A{
int a = 12;
float b = 12.56f;
}
但是不可以这样做:
class A{
int a;
float b;
a = 12; //非法,这是赋值语句(语句只能出现在方法体中),不是变量的声明
b = 12.56f; //非法
}
这是因为类体的内容由成员变量的声明和方法的定义两部分组成,下面这个才是正确的。
class A{
int a;
float b;
void f(){
int x,y;
x = 34;
y = -23;
a = 12;
b = 12.56f;
}
}
实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作。例如:
class A{
int a;
static b;
void f(int x,int y){
a = x; //合法
b = y; //合法
}
static void g(int x){
b = 23; //合法
a = z; //非法
}
}
一个类中的方法可以互相调用,实例方法可以调用该类中的其他方法;类中的类方法只能调用该类的类方法,不能调用实例
方法。例如:
class A{
float a,b;
void sum(float x,float y){ //这是一个实例方法
a = max(x,y); //合法(调用类方法)
b = min(x,y); //合法(调用实例方法)
System.out.print(a + b);
}
static float getMaxSquare(float x,float y){ //这是一个类方法
return max(x,y) * max(x,y); //合法(调用类方法)
}
static float getMinSquare(float x,float y){ //这是一个类方法
return min(x,y) * min(x,y); //非法(调用实例方法)
}
static float max(float x,float y){ //这是一个类方法
return a > b ? a : b;
}
float min(float x,float y){ //这是一个实例方法
return a < b ? a : b;
}
}
【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。
❁
☞点我前往上一讲☜
☞点我前往下一讲☜
❁
本帖最后由 835413444 于 2017-2-18 22:48 编辑
{:10_256:} 835413444 发表于 2017-2-18 22:44
每天一个极度纯洁的微笑 {:10_256:} 第17行,类方法的话,不应该去掉 static ? pyt1 发表于 2017-2-24 12:33
第17行,类方法的话,不应该去掉 static ?
帖子中难免有错误,可能是手敲太快了,感谢指正!!! a,b 是实例变量,第4行,把类方法的返回值给 a, 提示语法错误,不合法啊。
这是我改正之后的代码:
class A{
static float a,b;
void sum(float x,float y){
a = max(x,y);
System.out.println(a);
b = min(x,y);
System.out.println(a);
System.out.println(x+y);
}
static float getMaxSqu(float x, float y){
return max(x,y) * min(x,y);
}
static float getMinSqu(float x, float y){
return min(x,y);
}
static float max(float x,float y){
return x > y? a:b; //静态方法只能访问静态变量
}
static float min(float x,float y){
return x<y?a:b;
}
} pyt1 发表于 2017-2-24 12:47
a,b 是实例变量,第4行,把类方法的返回值给 a, 提示语法错误,不合法啊。
这是我改正之后的代码:
我上面给的代码第 12 行非法 第15行是非法的吧,因为类方法只能操作类变量,而上面操作的是实例变量。是否如此? dongyuguo6 发表于 2017-4-28 10:01
第15行是非法的吧,因为类方法只能操作类变量,而上面操作的是实例变量。是否如此?
是的,是这样,类方法只能操作类变量,上面 return 后是非法的
页:
[1]