• JAVA基础学习之路(三)类定义及构造方法


    类的定义及使用

     

    一,类的定义

    class Book {//定义一个类
        int price;//定义一个属性
        int num;
        public static int  getMonney(int price, int num) {//定义一个方法
            return price*num;
        }
    }
    
    public class test2 {
        public static void main(String args[]) {
            Book monney = new Book();//声明并实例化对象
            monney.price = 10;
            monney.num = 20;
            System.out.println(monney.getMonney(10,20));
        }
    }

    二,内存分析

    类是引用类型,创建时会申请分配内存

    堆内存:保存每一个对象的属性,需要new关键字才可以创建

    栈内存:保存一块堆内存的地址

    1,当使用Book bk = new Book();时,内存情况如下

    为属性赋值之后,如下

    2.分步创建对象,实例化

    Book monney = null;

    monney = new Book();

    任何情况下,只要看见了关键词new,就表示开辟堆内存,只要开辟了堆内存,一旦堆内存空间开辟了,里面就会有对象中所有属性,所有属性的内容为默认值

    实例化对象其实就是开辟堆内存

    三,类的封装

    class Book {
        private int price;
        private int num;
        public void setPrice(int p) {
            price = p;
        }
        public void setNum(int n) {
            num = n;
        }
        public int getPrice() {
            return price;
        }
        public int getNum() {
            return num;
        }
        public  int  getMonney(int price, int num) {
            return price*num;
        }
    }
    
    public class test2 {
        public static void main(String args[]) {
            Book monney = new Book();
            monney.setPrice(10);
            monney.setNum(20);
            System.out.println(monney.getMonney(10,20));    
        }
    }

    在构造类的过程中,属性尽量都写成private,这样,属性就对外部隐藏。通过setter方法设置属性值,getter方法获取属性值。外部若要访问类的属性,只有通过setter方法。

    四,构造方法

    类名  对象名 = new 类名();

    1.类名:类的名字,决定对象的属性和方法

    2.对象名:对象的唯一标识

    3.new:开辟堆内存,没有new则无法实例化对象

    4.类名()  实际上是调用了一个和类名相同的方法,即构造方法

    我们从来没有定义过构造方法,之所以可以使用,是java在编译时,为我们添加了一个名称与类相同,无参数,无返回值的方法

    构造方法只在实例化新对象时使用一次,就是在book = new Book();时使用,而普通的方法实例化对象后可以多次调用

    构造方法的作用:在 类对象实例化的时候设置属性的初始化内容,即构造方法是为属性初始化准备的,一个类中至少保留一个构造方法

  • 相关阅读:
    [LeetCode] 394. Decode String 解码字符串
    [LeetCode] 393. UTF-8 Validation 编码验证
    [LeetCode] Is Subsequence 是子序列
    [LintCode] Maximum Gap 求最大间距
    [LintCode] Nuts & Bolts Problem 螺栓螺母问题
    [LintCode] Kth Smallest Number in Sorted Matrix 有序矩阵中第K小的数字
    [LeetCode] Perfect Rectangle 完美矩形
    LaTex Remove Left Margin 去除左边空间
    LaTex Font Size 字体大小命令
    [LintCode] Continuous Subarray Sum 连续子数组之和
  • 原文地址:https://www.cnblogs.com/xhnxhnu/p/9113315.html
Copyright © 2020-2023  润新知