java类,对象和方法

 

面向过程和面向对象

面向过程:是一种执行者思维 主要处理简单的逻辑问题

面向对象:是一种设计者思维 主要处理复杂问题

注意: 面向对象和面向过程是相辅相成的 我们对于事物分析 首先使用面向对象对事物进行宏观整体分析,在使用面向过程对事物进行微观的具体执行

类和对象之间的关系

类:class 是一个模板

对象:具体的一个实例

一个类可以产生无数个对象 java中所有的对象通过new 关键字体现的

类的组成

Java中所有自定义类型都是引用类型

  • 成员变量

  • 方法

  • 构造方法

成员变量

局部变量和成员变量之间区别 类中定义的变量是成员变量,而方法中定义的变量,包括方法的参数,代码块中定义的变量被称为局部变量 A、内存中位置不同 成员变量在 堆内存 局部变量是栈内存 B、是否有默认值 局部变量是没有 成员变量有 整数---0 浮点数----0.0 布尔类型----false 字符类型---'\u0000' 引用数据类型----null C、作用范围 局部变量当前方法内有效 成员变量 在整个类中有有效的

方法

方法的四种书写方式

    //[A]没有参数 没有返回值  ---- 如果方法没有返回值的使用 void
     public   void    aa(){
​
         System.out.println("我是方法aa");
         //bb("ceshi",12); ----在【一个类中】 直接调用【同一种类型】的方法 直接使用方法名进行调用即可
     }
     //[B]有参数没有返回值----- String  a,int b  代表的是方法的参数 多个参数之间使用逗号(,)进行分割
    //a  b  称为 形参代表的是形式上参数
    public    void    bb(String a,int b){
        System.out.println("我是方法bb:"+a+"--"+b);
    }
​
    //[C]有返回值没有参数 -----return 返回值  方法的返回值只可有一个
    //那个位置调用cc方法  这个返回值就返回给谁
    public   int    cc(){
        System.out.println("我是ccc方法");
         return 18;
    }
    //[D]有参数有返回值
    public   String  dd(int a,double b){
​
        System.out.println("我是方法dd:"+a+"--"+b);
        return "ceshi";
    }

方法重载

在【一个类】中 出现了 【方法名相同】 【参数列表不同】 这种方法称为 方法的重载 参数列表不同 (只要满足一个就可以看成是参数列表不同) A、类型不同 B、个数不同 C、顺序(位置)不同 方法重载仅仅能够帮助我们更加方便的整理,归纳,记忆,调用 方法. 方法重载没有提高任何效率,也没有节约任何代码.

构造方法

注意:

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

  • 构造方法通过new关键字调用!!

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

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

  • 构造方法可以重载

public class Phone {
    //成员变量
    public String name ;
    public String color ;
    public double price ;
    public String storage ;
    //构造方法 无参
    public Phone() {}
    //构造方法 有参
    public Phone(String name, String color, double price, String storage) {
        this.name = name;
        this.color = color;
        this.price = price;
        this.storage = storage;
    }
    //方法重载根据参数个数,类型和顺序调用
    public void aa (){
        System.out.println("这是aa方法");
    }
    
    public void aa (int a,String b){
            System.out.println("这是aa方法");
        }
    
    public void aa (String b,int a){
            System.out.println("这是aa方法");
        }
​
} //类
Phone phone = new Phone(); //通过new关键字获取Phone类的实例化对象 无参
Phone phone2 = new Phone("华为手机","白色",2500,"256G"); //通过new关键字获取Phone类的实例化对象 有参
​
System.out.println(phone.name);
System.out.println(phone.price);
//由于未赋初始值 取默认值
//null
//0.0
System.out.println(phone2.name);
System.out.println(phone2.price);
//华为手机
//2500.0
​
​

this关键字

this关键字 ---->创建好的对象的地址

作用: A、解决局部变量名称和成员变量名称冲突的时候获得值的问题----this.属性 B、解决了构造方法之间相互的调用----this()

public class Phone {
    //成员变量
    public String name ;
    public String color ;
    public double price ;
    public String storage ;
    //构造方法 无参
    public Phone() {
        //在构造方法中相互调用
        this("华为手机","白色",2500,"256G");
    }
    //构造方法 有参
    public Phone(String name, String color, double price, String storage) {
        //this();
        this.name = name;
        this.color = color;
        this.price = price;
        this.storage = storage;
    }
}

扩展

类和对象在内存中的执行

通过类加载器将类的信息加载到jvm中的方法区中 方法区存放类信息对象信息、常量、静态变量和其他信息

通过new实例化对象时

  1. 分配对象空间,并将对象成员变量初始化为0或null

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

  3. 执行构造方法

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

所以栈中存放的是stu的地址值 指向堆中存放的地址,每实例化一个对象就会在堆中开辟一片空间并将地址值返回 this关键字代表创建好的对象的地址 如stu的this.age相当于0x111.age

当执行方法时将从方法区中将类的方法压入栈中 执行完后出栈

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值