Java基础教程 从C/C++到Java(二)

Java基础教程 从C/C++到Java(二)

推荐学习前复习一下C++关于类的相关知识

今天学习了java中关于类的基本知识,如下:

  1. 构造函数
  2. 类的调用
  3. 成员变量及成员函数
  4. 程序结构

程序结构如下图所示(IDEA):
Java基础教程 从C/C++到Java(二)_第1张图片
在src下的smallVendingMachine和vendingMachine两个package中分别有一个.java文件,涉及到跨包调用等基础操作
详细解释还是见代码及注释

代码

最主要的VendingMachine.java文件

package vendingMachine;  // 声明包

import smallVendingMachine.SmallVendingMachine;  // import 包名字.编译单元

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

public class VendingMachine {
    private String info = "This is info";  // info是私有成员变量 私有类型无法从类外访问
    private double total = 0;              // C++中不能通过这种方法初始化函数变量 java可以
    private double price;                  // 留到构造函数中初始化

    private VendingMachine(){  		// 构造函数
        price = 3;  // 初始化成员变量
    }
    private VendingMachine(double price){  // 重载构造函数
        this.total = price;
    }

    private void showInformation(){      // 成员函数默认类型为friendly(与C++不同) 同一个包下可访问 不同时需声明为public
        System.out.println(this.info);   // 每个成员函数存在隐藏的本地变量this指代调用此函数的对象
    }

    void setPrice(double price){  
        this.price = price;       // 同名时函数采取就近原则 price此处是形参并非成员变量 price = price没有意义
        showInformation();        // 可以直接其他调用成员函数
    }

    private static double balance = 0.5;  // static创建类变量 类似于python中的全局变量 是属于类本身而非对象的变量
    private static SmallVendingMachine svm = new SmallVendingMachine();  // 创建成员内部类变量

    void showBalance(){
        System.out.printf("%f", balance);  //格式化输出 同C++
        System.out.println();
    }


    private ArrayList<String> itemName = new ArrayList<String>();  // 范型容器类 类似于C++的向量Vector
    public int getSize(){
        return itemName.size();  // 范型容器类提供了许多方法
    }

    HashSet<String> hashSet = new HashSet<String>();  // 哈希集合 自动去除重复对象 有需要再深入了解
    HashMap<Integer, String> hashMap = new HashMap<Integer, String>();  // 哈希Map 键值对结构 类似于python的字典 有需要再深入了解

    public static void main(String[] arg){         // static类函数 属于类本身 类函数之间可以相互调用 但是不能直接调用成员函数
        VendingMachine vA = new VendingMachine();  // 创建对象
        vA.showInformation();                      // 调用方法

        VendingMachine vB = new VendingMachine();

        vA.showBalance();
        vB.showBalance();
        vA.balance = 1;    // 也可以写成VendingMachine.balance(仅类变量可以) vA和vB的balance都会受到影响
        vA.showBalance();
        vB.showBalance();

        svm.display();  // 调用成员内部类变量的方法

        function();     // 可以直接调用类函数function 但是不能直接调用成员函数showBalance
        //showBalance;   いけません

        VendingMachine[] vmarray = new VendingMachine[10];  // 对象数组 vmarray里放的全都是“指针”
        for(int i=0; i<10; i++){                            // for循环等基础操作是在主调函数里面的
            vmarray[i] = new VendingMachine();  // 初始化对象
        }
    }

    private static void function(){  // java的成员函数可以直接放在主调函数之后且无需声明!
        // nothing
    }
}

class A{  // 一个编译单元只能包含一个public类 仅public类可以对外可访问

}

和被调用的SmallVendingMachine.java

package smallVendingMachine;

public class SmallVendingMachine {
    private String infoSmall;

    public SmallVendingMachine(){  // 如果不在一个包里构造函数需要为public
        infoSmall =  "This is from smallVendingMachine";
    }

    public void display(){  //当在一个包中时无需声明为public
        System.out.println(infoSmall);
    }

    public static void main(String[] arg){
        SmallVendingMachine v = new SmallVendingMachine();
        v.display();
    }
}

明天继续(ง •_•)ง

你可能感兴趣的:(学习笔记)