定义类:定义一个类Square表示正方形
类和对象,属性和行为(方法),构造器Main类:输入样例:输入正方形的边长,例如:输出样例:分别输出正方形的周长和面积,例如:这一节——定义类,就体现了java与c本质的不同了;众所周知,JAVA是一门面向对象编程的语言。对象在哪?答案是:需要我们创建。在许许多多对象中,它们有相同,有不同。其实,我们可以先把具有同样属性和行为的对象分为一类,怎么分呢?总结出它们共同的属性和对象,我们写个框架模板,
定义一个类Square表示正方形
按下面的要求定义一个类Square表示正方形;
- 正方形有边长(side)的属性,定义一个私有成员变量表示正方形的边长;
- 为正方形定义一个默认构造器,默认构造的正方形边长为1.0;
- 为正方形定义一个带参数构造器,参数用于设置正方形对象的边长;
- 为私有成员变量定义setter和getter方法
- 定义一个成员方法:float getArea(),该方法计算并返回正方形的面积
- 定义一个成员方法:float getPerimeter(),该方法计算并返回正方形的周长
-
Square类的定义:
//定义正方形类: class Square{ }Main类:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Square square0 = new Square(); float side = scanner.nextFloat(); Square square1 = new Square(side); System.out.println("square0 面积:"+square0.getArea()+",周长:"+square0.getPerimeter()); System.out.println("square1 面积:"+square1.getArea()+",周长:"+square1.getPerimeter()); square1.setSide(10.0f); System.out.println("square1 面积:"+square1.getArea()+",周长:"+square1.getPerimeter()); } } /* 请把Square类的定义代码写在下面 */ /* 请在这里填写答案 */输入样例:
输入正方形的边长,例如:
5.5输出样例:
分别输出正方形的周长和面积,例如:
square0 面积:1.0,周长:4.0 square1 面积:30.25,周长:22.0 square1 面积:100.0,周长:40.0
按题目,main类已经完整,我们只需要补充Square类的定义。
这一节——定义类,就体现了java与c本质的不同了;
类和对象:
众所周知,JAVA是一门面向对象编程的语言。对象在哪?答案是:需要我们创建。在许许多多对象中,它们有相同,有不同。
其实,我们可以先把具有同样属性和行为的对象分为一类,怎么分呢?总结出它们共同的属性和对象,我们写个框架模板,那我们直接在创建几个相同属性的对象的时候,直接就可以套用一个模板
接下来,我们边写边看——“知行合一”
属性:
定义类,顾名思义就是这个类是啥样的。
不同属性和行为,决定了每一个类都不同。
class Circle//定义类的整个大框架
{
//...属性1;
//...属性2;
//...
//...行为1;
//...行为2;
//...
}
实例分析:
这道题,对象是:Square即正方形
按照题上给出的,正方形的属性有:边长
这时候有小伙伴会说,“欸,面积和周长不算吗?”,不算。你想想面积和周长怎么来的,根本还是基于属性(周长)算来的,面积和周长只是与边长相关的公式算来的。
那正方形的行为呢?答:求面积和周长
基于属性,发出的动作就是行为;特有的行为,java里面又叫方法,c里面叫函数
既然基于属性,那这个方法肯定用到了属性的值,那就要传值——我们想到了传参,至于把属性的值转换成面积和周长,这就是函数。
属性代码:
定义属性:public/private + 类型 + 变量名 ;
这个属性定义完整后,就是我们的成员变量。(在Suqare类里定义好的变量叫成员变量)
class Square
{
private float side;//私有 float类型 名叫side
}
public还是private是访问修饰符,后面具体了解;现在嘛,一般题目上没说私有/private,咱们就大胆写上public。
显然这里说了:

类型怎么确定的?看main方法
![]()
构造器:
构造器是什么?
“类中定义的一种特殊方法”。咱们说人话就是对成员变量赋值,分为默认初始化,传值修改。
默认初始化,就是直接赋值初始化;传值修改,我们将输入的值,传给构造器使得相应成员变量被赋值。
这两种赋值方式,也意味着有两种构造器:无参构造器,有参构造器。
咱们再看这句话:“类中定义的一种特殊方法”。既然是方法(函数),那肯定有函数格式那一套: 返回类型 函数名(){ }
构造器这个方法特殊就特殊在没有返回类型。
格式:
public 类名()
{
//赋值语句1
//赋值语句2
...
}
public 类名(类型 形参名...)
{
成员变量名 = 形参名;
//赋值语句2
...
}
实例分析:

class Square
{
public Square()
{
side = 1.0f;//小细节:float类型变量赋值需要在末尾加f
}//无参构造器,又名默认构造器
public Square(float s)//s是main方法里面我们输入的值
{
side = s;//将s赋值给side,修改变量的值
}//有参构造器
}
构造器:实际上是赋值初始化,在一个对象里只能调用一次。你想初始化这个名词本来也只有一次的含义。
我们把眼光放在main方法里面调用构造器的语句上:

现在我们可以解释这句话的逻辑:
new是操作符,后面是构造器,意为:调用构造器,生成对象;
那构造器真的没有返回类型吗,其实是有的,就是返回一个对象,整个对象赋给square0(仅助理解,不用较真)
接着:接下来的方法与函数大同小异,我们挑重点说说;
方法:
setter和getter方法:
set英译:设置,构造器是用来创建对象时,对属性初始化的,只能使用一次;但是有时我们需要再次改变成员变量的值,那该怎么办?这就是setter方法的用处。
其次,有时成员变量是private--在其他类里无法访问,即我们不能直接在main里引用成员变量进行赋值;get方法就是可以获取不论私有还是公有成员变量的值,并返回。
setter方法格式:
public void set成员变量(变量类型 变量名)//是一个方法,()为函数调用操作符
{
成员变量 = 变量名;//传过来的是我们输入的值,在setter方法里赋给成员变量
}//记得setter方法只是修改成员变量,无返回值
依葫芦画瓢:getter 方法格式:
public 返回类型 get成员变量()//就是get已有变量的值,不需要传值
{
return 成员变量;
}//get既然是拿到,那肯定有返回值
在方法名命名时,默认第二个单词首字母大写
实例代码:
public void setSide(float side1)//无返回类型,传值
{
side = side1;//赋值给成员变量
}
public float getSide()
{
return side;
}
本题在写这些方法时,有无传参可以在main方法里面看是否有传值,再在方法定义时决定是否返回。
作为green hand在写定义类题目,常看看main方法里调用方法时有无参数,需要几个参数。
除了构造器外,其他方法若没有返回值,记得加上void
正方形的面积和周长方法:
直接上代码:
public float getArea()//求面积
{
return side * side;//正方形面积公式
}
public float getfloat getPerimeter()//求周长
{
return side * 4;
}
这里肯定会有同学不习惯,在()里面不写形参啥的。
听我分析:在这个类里面,属性和方法是并存的,方法如果想要使用成员变量,直接使用。
呼——终于,完整代码呈现:
class Square
{
private float side;
public Square()//无参构造器
{
side = 1.0f;
}
public Square(float s)
{
side = s;
}
public void setSide(float side1)
{
side = side1;
}
public float getSide()
{
return side;
}
public float getPerimeter()
{
return side * 4;
}
public float getArea()
{
return side * side;
}
}
总结:(先看目录)
定义属性时,可看main方法里面是否有相应的类型提示;
构造器是没有返回类型,不用写void,名字都是类名;
类里面的方法要调用成员变量,直接用;
setter有形参,getter无形参
更多推荐

所有评论(0)