mosh-java-2.2 classes

  1. 对象和类的区别 
  2. 创建类
     

        3.heap stack

这个变量是用引用存在heap上的对象的

 原始类型的变量,变量和值都是存在stack上的

4.面向对象编程的原则

        a.封装

 

只有在 

才用staic 

0.intelli j快捷创建getter setter

选中变量名后点击小灯泡 选edncapsulate

 b.抽象 abstraction

耦合

5.static 关键字

 

 

 使用.可以访问

 而不是属于一个对象

 

package org.example;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
    public static void main(String[] args) { //main方法是静态的是 因为直接使用此方法 而不用再去创建新对象见最后一点
//            TextBox textBox1 = new TextBox();
//        var textBox1 = new TextBox(); //var关键字 java编译器会根据等号右边的类型自动给变量赋上适合的类型,这种变量是静态的,一旦赋值不可修改,和js中的var是两个不同的东西
//        textBox1.setText("Box 1");
//        System.out.println(textBox1.text.toUpperCase());
//
//        var textBox2= new TextBox(); //var关键字 java编译器会根据等号右边的类型自动给变量赋上适合的类型,这种变量是静态的,一旦赋值不可修改,和js中的var是两个不同的东西
//        textBox2.setText("Box 2");
//        System.out.println(textBox2.text);


        /*2.内存分配

heap
stack
当运行完一个method java会自动删除储存在stack上的变量
同时java也会自己看 在heap上没有用的对象 没用就删除 这叫做gabage collection
* */

//        var textBox1 = new TextBox();//变量textBox1 正在引用在heap上的值,所以这些变量被称为引用类型,因为这些变量并不存储实际的值;而如果申明一个原始 类型int的变量,这个int是储存在stack中的,而此变量的值将会被储存在那个储存地址
//        var textBox2 = textBox1;//textBox2\textBox1都在引用同一个在heap上的对象,所以没有两个不同的对象,在heap上只有一个对象;而在stack上有两个对象是引用这个对象,正如式子所见,赋值只是把值给赋值到了textBox2;实际我们得到的是对象在heap上的地址
//        textBox2.setText("Hello world");//所以改变其中一个变量另外的变量也能看到这个改变
//        System.out.println(textBox1.text);


        /*
         *3.
         * */
//        如果功能变多 main method会变得很臃肿,这叫做程序性编程 -mosh
//        int baseSalary = 50_000;
//        int extraHours = 10;
//        int hourlyRate = 20;
//
//        int wage = calculateWage(baseSalary, extraHours, hourlyRate);
//        System.out.println(wage);
//    }
//
//    public static int calculateWage(int baseSalary, int extraHours, int hourlyRate) {
//        return baseSalary + (extraHours * hourlyRate);


        /*
         *  4.面向对象编程的规则
         *   (1).封装 encapsulation
         *
         * */
//        var employee =new Employee();
//        employee.baseSalary = 50_000;
//        employee.hourlyRate = 20;
//        int wage =employee.calculateWage(10);

//        var employee = new Employee();
//        employee.setBaseSalary(-1);
//        employee.setHourlyRate(20);
//        int wage = employee.calculateWage(10);


        //    使用intellij快速创建getter和setter
//    (2).抽象
//    a.coupling耦合
//        ex.1
//    var employee = new Employee();
//        employee.setBaseSalary(-1);
//        employee.setHourlyRate(20);
//    int wage = employee.calculateWage(10);// 以上四句话都和employee class耦合了,一个class提供的方法越多,越有可能被其他类耦合
//employee.尽量减少暴露在class外的东西

//        ex.2
//        var browser = new Browser();
//        browser.navigate();

//        ex.3
//        var employee = new Employee(50_000);//构造函数用于构造或创建一个新的对象
//        employee.calculateWage(10);
//        int wage = employee.calculateWage();

//        b.重载构造函数
//        ctrl b 快速跳到函数
//        ctrl p 查看这个函数有哪些传参

//        c.静态字段和方法 static
//
//        Employee.
        var employee = new Employee(50_000);
            Employee.printNumberOfEmployees();
    }


}

employee.java

package org.example;

public class Employee {
    private int baseSalary;

    private int hourlyRate;

    public static int numberPfEmployees;

    //    构造函数
    public Employee(int baseSalary, int hourlyRate)//构造函数没有返回 和class同名
    {
        setBaseSalary(baseSalary);                         //初始化值
        setHourlyRate(hourlyRate);
//        每次创建 员工数量=都要加1
        numberPfEmployees++;
    }

    public Employee(int baseSalary)//构造函数没有返回 和class同名
    {

        this(baseSalary, 0);//        THis关键字是对当前对象的引用

    }

    public int calculateWage(int extraHours) {//这个计算函数没有参数 它直接就用对象里的变量了
        return baseSalary + (extraHours * getHourlyRate());
    }

    public int calculateWage() {//重载一个方法,不要过度使用
        return calculateWage(0);
    }

    private void setBaseSalary(int baseSalary) {
        if (baseSalary <= 0)
            throw new IllegalArgumentException("salary不 能比0小");//抛错会导致程序终止
        this.baseSalary = baseSalary;

    }

    private int getBaseSalary() {
        return baseSalary;
    }

    private int getHourlyRate() {
        return hourlyRate;
    }

    private void setHourlyRate(int hourlyRate) {
        if (hourlyRate < 0)
            throw new IllegalArgumentException("不能比0小");
        this.hourlyRate = hourlyRate;
    }

//创建一个静态方法
    public static void printNumberOfEmployees(){
        System.out.println(Employee.numberPfEmployees);
//即使在同一个类中 在静态方法中无法访问其他的在此class里的方法,因为calculateWage属于employee对象,是一个实列方法;
//new Employee()//        要使用就要新建一个employee对象,jiu
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值