面向对象离不开面向过程
实现
public class mianxiangduixiang {
//定义人的属性(属性,人的象征)
int age;//年龄
String name;//姓名
int height;//身高.单位:cm
double weighe; //体重 单位:kg
String sex ;//性别,男,女,保密
//方法: 返回值类型 方法名(参数列表)
void study(String Subject){
System.out.println(name+"在学习"+Subject);
}
}
完整代码呈现
public class person {
/**
* 面向对象
* Field属性
*/
//定义人的属性(属性,人的象征)
int age;//年龄
String name;//姓名
int height;//身高.单位:cm
double weight1; //体重 单位:kg
String sex ;//性别,男,女,保密
//方法: 返回值类型 方法名(参数列表)
void study(String Subject){
System.out.println(name+"在学习"+Subject);
}
public static void main(String[] args) {
//person类表示自然界中的人类
//对象是类具体实现,一个类可以有无数个对象
//通过类型创建一个基于类的对象
//通过new关键字创建一个人类对象,并将该对象赋值给p
person p = new person();
//给新创建的对象设置名字,年龄。。。
p.name = "张三";
p.age = 19;
p.height = 175;
p.weight1 = 88;
p.study("java");
//再创建一个人类对象
day2.person p1 = new day2.person();
}
}
构造方法
- 构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
- 主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的。
- 类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法。
- 构造方法在初始化对象时自动执行,一般不能显式地直接调用.当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应。完成构造函数的调用。
- 构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动,但是经常将他设计为进行各种初始化活动,比如初始化对象的属性
小知识:
{
} 代码块起初始化作用,会在调用构造方法前执行
在代码块中,无法直接使用有可能未被赋值的属性
如果要在代码块中输出值,要把赋值提前到代码块前面
public class changfangxing {
int x=5 ;
{
/*
代码块起初始化作用,会在调用构造方法前执行
*/
x = 10;
System.out.println("这是代码块"+x);
}
changfangxing() {
System.out.println("这是无参构造");
}
changfangxing(int x){
this();//调用无参构造
this.x =x;
}
public static void main(String []args){
//创建一个changfangxing对象
changfangxing b = new changfangxing();
System.out.println(b.x );
}
}
输出的结果会随着int x=5 在代码块的上下区域而进行改变。
构造方法(以下代码实现以圆为例)
特点:
- 方法名和 类名完全一致
- 方法名 不能设置 返回值类型(void 都不能写)
- 构造方法 通过 new 关键字来调用
- 如果类中,没有提供构造方法,那么 JVM(java虚拟机) 会自动提供一个无参(没有参数)构造方法
- 如果类中定义的有构造方法,那么 JVM 不再提供任何额外的无参构造
作用:
*创建对象- 有参构造方法 还可以给 属性 赋值
案例
public class CircleTest {
public static void main(String[] args) {
// 通过 Circle 类型,构建一个 具体的圆
Circle circle = new Circle(10.2);
// 设置 圆的半径 为 5
circle.r = 5 ;
double perimeter = circle.perimeter();
System.out.printf("半径为%.1f的圆、周长为%.1f\n", circle.r, perimeter);
double area = circle.area() ;
System.out.printf("半径为%.1f的圆、面积为%.1f", circle.r, area);
}
}
>方法的重载
* 在一个类中,具有多个相同的方法名,这种现象称为 方法的重载
* 方法的重载 必须同时满足以下2个条件
* 方法名 必须相同
* 参数列表不同 ( 参数个数不同 或者 参数类型不同 )
* 当 局部变量(定义在方法中的变量) 和 成员变量(类中的变量)的名字冲突的时候,优先使用 局部变量的名字, 成员变量的名字 会被 覆盖
* 如果此时需要使用 成员变量(属性),那么通过 this 关键字 进行访问
* this 在 java的 类中,代表 该类的 对象(调用该属性或者方法的对象)
* this 通过 `.` 可以调用 属性 ,也可以调用 成员方法
* this 还可以调用 构造方法 (在构造方法中,调用构造方法)
* this() : 调用无参的构造方法
* this 在调用构造方法的时候,必须出现在构造方法中,作为第一个语句
public class Circle {
double r ;
Circle() {
}
Circle(double r) {
this();
this.r = r ;
}
double perimeter() {
return 2 3.14 this.r ;
}
double area() {
return 3.14 r r ;
}
double area2() {
return this.area();
}
}