面向对象程序设计:
- 每个对象都有自己的状态(也称为属性)和行为。
- 具有共同状态和行为的对象被认为是属于同一类的。
- 类是抽取不同实体的共性而得到的一个抽象的概念模型。
类和对象
1.任意给出一个圆,求其面积和周长。(面向对象编程)
UML图:
考试要考!!!
具体图形为:
代码:
//任意给出一个圆,求其面积和周长。(面向对象编程)
//数据保留两位小数方法
import java.util.Scanner;
public class demo3 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入半径:");
float radius = sc.nextFloat();
Circle circle = new Circle(radius);
double area = circle.getArea();
double length = circle.getLength();
//保留小数点后两位小数
System.out.println("半径为"+radius+"的圆的面积为:"+String.format("%.2f",area));
System.out.println("半径为"+radius+"的圆的周长为:"+String.format("%.2f",length));
}
}
class Circle{
float radius;//实例变量
public Circle(float radius){ //重写构造方法,传入randius参数
this.radius = radius; //this关键字
}
public double getArea(){
//Mith.PI,在Mith模块中,所有方法都用static修饰,所以叫类方法,具体static的用法后面会提到
return (Math.PI)*radius*radius;
}
public double getLength(){
return 2*(Math.PI)*radius;
}
}
2.任意给出一三角形,计算其面积并输出面积。(求解公式如下:)
解决方法:类名:Triangle
属性:三边:float a,float b,float c
方法:getArea():float
=>实例化对象:triangle
调用方法:triangle.getArea()->得到area
在类的内部,可以访问任何成员。——类中的方法可以访问成员变量,也可以调用成员方法!!!
构造方法
- 构造方法可以重载。它们由不同的参数表区分。(在上面代码中已经体现构造方法的重载)
- 重载的意思是:多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。
- 方法的返回类型和参数的名字不参与比较 . 方法重载是一种多态的体现。
变量、方法
成员变量:类体中、方法外定义的变量称为类的成员变量
- 成员变量在定义时有默认初值——int型默认为零,不需要赋值,也可输出
- 成员变量在它所在的整个类内有效
局部变量:在方法体中定义的变量、方法的参数被称为局部变量。
- 局部变量在定义时没有默认初值——不赋值会报错:可能尚未初始化变量a
- 局部变量在它所在的方法内有效
- 局部变量不能说明为static的。
//调用变量方法
//static修饰变量有优点
import java.util.Scanner;
public class demo4 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入半径:");
float radius = sc.nextFloat();
Circle1 circle = new Circle1(radius);
float r = circle.radius; //对象.实例变量名
System.out.println("半径为:"+r);
//成员变量有默认初值,即使在没有赋值的情况下,也可以输出
int a = circle.a;
System.out.println("在没有给a赋初值的情况下:a="+a);
//Math.PI,在Mith模块中,所有方法都用static修饰,访问方法:类名.类变量名.
System.out.println("PI值为"+Math.PI); //类名.类变量名
//Math.PI = 3.14; //Cannot assign a value to final variable 'PI'(不能给最终变量PI赋值)
//为什么用static修饰方法=>个人想法(不够之后再补充):
//1.使用static修饰的变量可以直接被“类名.类变量名”的方式调用,这样在进行常用变量调用的时候,
// 不需要再去实例化一个对象,然后按照“对象.实例变量名”的方式调用了,减少了很多麻烦
//2.对于有一些默认值的变量,我们一般不希望用户修改它,以免造成紊乱,所以用static修饰,使其变为一个静态变量
circle.set();
}
}
class Circle1{
float radius;//实例变量
int a;
public Circle1(float radius){ //重写构造方法,传入randius参数
this.radius = radius; //this关键字
}
public void set(){
//报错:可能尚未初始化变量a
//int a;
//System.out.println(a);
//初始化a,成功
int a = 3;
System.out.println("初始化局部变量a后,输出值为:"+a);
}
}
为什么用static修饰方法=>个人想法(不够之后再补充):
使用static修饰的变量可以直接被“类名.类变量名”的方式调用,这样在进行常用变量调用的时候,不需要再去实例化一个对象,然后按照“对象.实例变量名”的方式调用了,减少了很多麻烦
对于有一些默认值的变量,我们一般不希望用户修改它,以免造成紊乱,所以用static修饰,使其变为一个静态变量 Math.PI = 3.14; //Cannot assign a value to final variable 'PI'(不能给最终变量PI赋值)
具体定义格式:
类方法不可以操作实例变量原因:
因为类方法的调用可以通过“类名.方法名([实参])”方式,此时类还没有创建对象,因此实例成员变量还没有分配内存,所以无法调用。
this关键字
- java为每个对象分配一个this引用变量,代表当前对象。
- 作用:区分同名的实例变量和局部变量。
- this可以出现在实例方法和构造 方法中,但不可以出现在类方法中。(和类方法不可以操作实例变量原因类似,没有给实例变量分配内存,也就不存在当前对象了)
对象的组合
-
什么是对象的组合:
一个类中的成员变量,是另一个类的对象,就称为对象的组合。(一个类的实例化对象,作为另一个类的成员变量而存在)
不想写了,下一个再写吧.如果想看的,可以去JAVA学习记录(4)去看哦,goodbye~~