Java面向对象

import java.time.LocalDate;

/*
* 对象:
*   1 代码角度:new的一个实例,封装了特有的数据
*   2 数据角度:封装数据和逻辑的一种方式
*   3 现实角度:对象就是某一个具体的东西,一切皆对象
*   4 设计角度:从实际的实体中抽象出来某些属性的一种实体表示
*
* 封装:将一类实体的公共的属性和方法封装在一个类中,将属性私有化,通过get/set方法对类中数据进行访问,
*	 	尽可能少暴露类中数据给外部访问,保证安全性。
* 类:
*   概念:我们在思想上对某个事物/东西/的唯一性标识
*       对某个事物的一个界定(定义)
*       对客观事物描述的一个标准,一个模板
*       根据具体的事物/需求 抽象出来的属性特征
*
*   通过不同的属性,划分不同的类,通过不同的属性值,划分不同的个体
*   类是引用数据类型
*
*   属性分两种:
*       1 静态属性:类的行为和功能
*       2 动态属性:类对象的行为和功能
*
* 代码角度:类和对象都是保存数据的一种手段
*
* 类中可以包含如下(构成):
*   1 main:入口方法只要该类不是启动类,就可以没有
*   2 成员变量:每个对象共有的属性,属性值可以相同也可以不同
*   3 静态变量:每个对象共有的属性和值(保存在方法区)
*   4 局部变量:栈帧私有化,栈帧独享
*   5 成员方法
*   6 静态方法:静态方法可以使用对象调用,在编译阶段,会把对象引用变量转换成对应的类名去调用
*   7 构造方法
*   8 抽象方法
*   9 静态语句块
*   10 动态语句块
*   11 this
*   12 super
*
* 实例化:
*   类 变量 = new 构造方法(参数)
*   1 加载类到静态区
*   2 调用构造方法(栈内存压栈,开辟栈帧),在堆内存开辟空间
*   3 把对应类中的成员属性复制到内存中
*   4 再把堆内存地址赋值给栈内存栈内存变量
*
* 变量分类:
*   1 成员变量:每个对象共有的属性,属性值可以相同也可以不同,类中使用非static修饰
*   2 静态变量:每个对象共有的属性和值(保存在方法区),类中使用static修饰
*   3 局部变量:栈帧私有化,栈帧独享,是方法中声明的变量,作用域为当前方法
*
*   初始化时机:  静态变量:类加载阶段。 成员变量:创建对象时候(调用构造方法)
*
*   应用场景:
*       静态变量:类级别,所有对象共享,比如:一个静态变量 static int age=10 那么所有对象都有这个属性,并且值都是18
*               静态是对象共享数据,即使使用对象去访问,编译时也会转换成类名去访问,正在内存中只有一个副本
*       成员变量:对象和对象之间有相同的属性,但可能有不同的值,非对象共享,存在多个副本
*
* javaBean
*   成员变量私有化,只能在当前类中使用
*   有对应的getter/setter方法,是对外提供的公共方法,便于访问对应的变量
*   对应得构造方法
*
* java.lang.NullPointerException:
*   空指针异常,是运行时异常
*   当使用null值(空的引用)去访问成员属性时,出现空指针异常,即访问一个不存在的属性
*
* Java包机制
*   一般采用公司域名倒置来命名,避免包名冲突。通过包来体现封装性,提升代码的重用性和安全性,可以提高编码效率
*
* 权限修饰符(限定类的使用范围)
*   private 私有化权限修饰符,除了当前类之外,都不能访问
*   public 公共的权限修饰符,谁都能访问
*   default(可不写) 同一类中和同包中使用
*   protected 受保护的权限修饰符,要么同类,要么同包,要么有继承关系
*
* JVM特性:
*   跨平台、可移植性、面向对象、多线程、垃圾自动回收机制
*   垃圾:程序执行过程中,如果不再有引用指向这个对象,该对象被视为垃圾数据,等待被回收
* */
public class EmployeeTest {
    public static void main(String[] args) {

        // 实例化对象数组(创建一个Employee对象数组)
        // 创建一个Employee引用类型变量数组(局部变量),取名为staff,保存的是堆内存对象的内存地址
        Employee[] staff = new Employee[3];

        // 对象数组初始化
        staff[0] = new Employee("小明",7500,2015,9,12);
        staff[1] = new Employee("小红",5000,2016,8,2);
        staff[2] = new Employee("小芳",6000,2017,6,20);
        // staff[0]: com.tianl.oop.core_java.Chapter04_ObjectAndClass.Employee@1b6d3586 是一个内存地址
        System.out.println(staff[0]);

        for (Employee e : staff) {
            e.raiseSalary(10);
        }

        for (Employee e : staff) {
            System.out.println("name:"+e.getName()+", salary:"+e.getSalary()+", hireDay:"+e.getHireDay());
        }
    }

}

class Employee{

    // 默认值:整数为0,小数位0.0,字符为\u0000,引用为null,字符串也是引用类型
    private String name;
    private double salary;
    private LocalDate hireDay;

//    public Employee() {
//    }

    // 显示构造器
    public Employee(String name, double salary, int year, int month, int day) {
        this.name = name;
        this.salary = salary;
        this.hireDay = LocalDate.of(year,month,day);
    }

    // 获取私有属性
    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public LocalDate getHireDay() {
        return hireDay;
    }

    // 涨薪
    public void raiseSalary(double byPercent){
        double raise = salary * byPercent / 100;
        salary += raise;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值