zoukankan      html  css  js  c++  java
  • Java对象与类

    java文件

    通常一个java文件只会有一个类,但是有多个类也是允许的

    只是public修饰的公共类要与java文件名相同,但是编译的结果也是每个类会有一个.class文件(包括内部类A与外部类Test)

    类组成

    实例域与方法域

    static静态域:

    final域:

     

    方法参数

    隐式参数:调用该方法的实例对象,在方法中this表示隐式参数

    显式参数:方法括号里的参数

     

    构造器

    public修饰,名字与class名相同,如果没有写则会有一个默认的无参构造器,当写了构造器就不会有这个默认的无参构造器而需自己添加

    默认域初始化

    实例域如果定义时未赋值,且在构造器中未被初始化,那么就会自动地将其赋予默认值(数值型变量->0,布尔型->false,对象引用->null)

    在一个构造器中调用另一个构造器

        public Employee(){
    
        }
    
        public Employee(int salary,Date workDate){
            //调用无参构造器
            this();
            this.salary=salary;
            this.workDate=workDate;
        }

    初始化块

    当只要调用构造器时,就会按顺序执行代码块

        {
            this.salary=100;
        }

    调用构造器具体步骤

    1. 所有数据域都被初始化
    2. 按声明顺序依次执行初始化块
    3. 执行构造器,如果在一个构造器中调用了第二个构造器,那么就去执行第二个构造器主体
    4. 执行完第二个构造器主体则接着执行第一个构造器主体

     

    封装

    将类内部的实例域设为private,外部不可访问,然后提供Getter和Setter方法来访问与修改

    需要注意的是在Getter函数中,若是返回一个可变的对象,需要在Getter中clone再返回,不然私有域会被修改破坏封装性

        public Date getWorkDate(){
            //clone得到对象副本,将副本返回,避免被修改
            return (Date)workDate.clone();
        }

    如果直接return workDate;那么外部就能引用同一个对象,直接跳过setter对private进行修改

    注意事项

    1.构造器不应该写与类的实例域的同名局部变量,有同名参数会直接报错

    没有同名参数时会覆盖类中的实例域,导致逻辑错误

        public Employee() {
            //覆盖了实例域,导致逻辑错误
            int salary=100;
        }
  • 相关阅读:
    Socket和ServerSocket学习笔记
    跨域资源共享的10种方式
    javascript执行环境(执行期上下文)详解
    js 自动插入分号
    原型对象prototype和原型属性[[Prototype]]
    构造自己的动画函数:animation,stop功能的实现
    sizzle源码分析 (4)sizzle 技术总结及值得我们学习的地方
    sizzle源码分析 (3)sizzle 不能快速匹配时 选择器流程
    sizzle源码分析 (2)ID 类 tag querySelectorAll 快速匹配
    sizzle源码分析 (1)sizzle架构
  • 原文地址:https://www.cnblogs.com/ming-szu/p/9159912.html
Copyright © 2011-2022 走看看