Java面向对象详解(2)类的定义,内存图分析,构造器(构造方法)

目录

1:类的定义

2:简单内存分析_uml类图

 3:构造方法的基本使用 

4: 构造器 4 个要点

5:构造器的重载(创建不同的对象)


1:类的定义

一个源文件只能由一个public class,但是可以有许多个class

public class Car {
    //一个源文件只能有一个public类
}
class Type{
    //可以有多个类

}
class Glass{
    //但是只是空类,没有意义

}
class Carbody{

}

对于一个类来说一般有有三种成员,第一个是属性,第二个是方法,第三个是构造器(又叫做构造方法),这三种成员都可以定义零个或者三个

属性用于定义类或者说该类对象所包含的数据或者说静态特征,属性的作用范围是整个类体,如果不初始化,java会使用默认的值对其初始化

 

 方法用于定义类,或者该类对象的具体功能和行为动作的实现

在面向过程编程中,函数是最基本的单位,(方法就是函数)但是在面向对象编程的时候整个程序的基本单位是类,方法是从属于对象和类的

下面来定义一个简单的学生类

public class Stu {
    //属性
    int  id;
    String name;
    String age;
    //方法
    void thing(){
        System.out.println("学习,吃饭,睡觉");
    }
    //构造方法
    Stu(){
    }
    public static void main(String args[]){
        Stu s=new Stu();
        System.out.println(s.id);//默认初始化 0
        System.out.println(s.name);//null
        s.id=20202942;//初始化
        s.name="古倪啷虚宇";
        System.out.println(s.id);//20202942
        System.out.println(s.name);//古倪啷虚宇


    }

}

2:简单内存分析_uml类图

方法是共用的

 3:构造方法的基本使用 

构造器的名称必须和类型名一致

构造器用来给对象初始化,在调用构造器之前,对象就已经建好了

java通过new关键字来调用构造器,从而返回一个类的对象

 课堂练习  定义一个“点”(Point)类用来表示二维空间中的点(有两个坐标)。要求如下:  可以生成具有特定坐标的点对象。  提供可以设置坐标的方法。  提供可以计算该“点”距另外一点距离的方法。


public class Point {
    double x,y;
    Point(double _x,double _y){
        this.x=_x;
        this.y=_y;
    }
    double getDistance(Point p){
        return  Math.sqrt((this.x-p.x)*(this.x-p.x)+(this.y-p.y)*(this.y-p.y));
    }
    public static void main(String[] args){
        Point p=new Point(3.0,4.0);
        Point origin=new Point(0.0,0.0);
        System.out.println(p.getDistance(origin));
    }

}

对象的创建完全是由构造方法实现的吗?

不完全是。构造方法是创建 Java 对象的重要途径,通过 new 关键字调用构造器时,构造器 也确实返回了该类对象,但这个对象并不是完全由构造器负责创建的。创建一个对象分为如下四 步: 1. 分配对象空间,并将对象成员变量初始化为 0 或空

2. 执行属性值的显式初始化

3. 执行构造方法

4. 返回对象的地址给相关的变量

4: 构造器 4 个要点

 构造器通过 new 关键字调用!!

 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能 在构造器里使用 return 返回某个值。

 如果我们没有定义构造器,则编译器会自动定义一个无参的构造方法。如果已定义 则编译器不会自动添加!

 构造器的方法名必须和类名一致!

5:构造器的重载(创建不同的对象)

public class Overload {
    int id;
    String name;
    int age;
    public Overload(){

    }
    public Overload(int id){
        this.id=id;
    }
    public Overload(int id,String name,int age){
        this.id=id;
        this.name=name;
        this.age=age;
    }
    public static void main(String[] args){
        Overload o=new Overload(1100);
        Overload oo=new Overload(11001,"古倪啷虚宇",20);
        System.out.println(o.id);
        System.out.println(oo.id+oo.name+oo.age);

    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值