• java面向对象、构造方法 之内部类


    UML类图

    UML  Unified Modeling Language (UML)又称统一建模语言或标准建模语言

     

    在一个类中

         属性表示这类事物的性质(描述它的数据)

         方法表示这类事物的功能(用代码实现功能就意味着写流程)

     

     

    可见性

       Java中默认的可见性是包内可见

       Private 将可见性限制在本类内部,在类的外部,即使同一个包中也不能访问

       Public 将可见性完全放开,所有地方都可以访问

       Protected 本包和子类可见

     

    可见性是语言和编译器和JVM级别的,这些信息保存在类的元数据中

    类的元数据:

          类的全名

          类中的成员名

               如果方法则包含参数/返回值等详细信息

    方法代码的位置(内存地址)

    程序启动(此时还没有调用main方法)

          Java/javaw一开始运行的时候(此时还没有调用main方法)

          加载类(.class,字节码)并保存在代码区

          把类中的静态成员/数据初始化到静态区

    找到main方法并调用

          在栈(Stack)中产生main方法的栈帧

           Circle  c =  New Circle()

          会在堆(heap)区为c对象分配一块内存空间

          调用Circle的构造函数(没有定义的话会自动生成一个)

          构造函数会初始化实例属性(没有指定值的话就初始化为0

          对象初始化完毕后,栈帧中会有一个局部变量c指向这个对象

     

    实例属性和静态属性的理解与区别

       实例属性:

    1.每个对象都有自己单独的一份实例属性,实例属性的数据保存在堆区。

    2.随着对象的创建而产生,可以随时创建对象。

    3.会随垃圾回收清理掉,从而释放它占据的内存空间

       静态属性

    1.一个类只有一份静态属性,无论创建多少个对象,静态数据只有一份。静态数据存放在静态区。

    2.类通常在启动时加载,在类加载时被初始化,通过反射才能在运行过程中加载新类。

    3.一旦加载就一直存在。

       

    实例方法和静态方法的理解与区别

    实例方法

    1.在实例方法中访问实例属性,相当于this.属性名,在本类中this可省略

    2.在实例方法中默认的上下文环境是this,也就是当前对象

    3.在实例方法中可以访问静态属性,相当于 类名.属性名,在本类中类名可省略

    静态方法

    1.在静态方法中可以访问静态属性,相当于 类名.属性名,在本类中类名可省略

    2.在静态方法中不能使用this,也就是不能this.属性名,访问实例属性

    static void Count() {

    PI = 3;

    //this.radius =5;

    }

          

    构造方法 Constructor

        1.构造方法与类名相同,没有返回值,连void都没有

        2.具有可见性

    3 .不写时,编译器默认生成一个无参构造方法

        4.将所有实例属性初始化为0

    5.如果程序编写了一个构造方法,而不再自动生成构造方法

    6.无参构造方法

          1>无参构造方法可以方便地创建对象

                无论是人工创建还是通过反射创建都很方便

          2>无参构造方法创建的对象,属性值要么是0,要么是n

    通常在使用之前还需要再次给属性赋一个有用的值

       java中有一个概念---bean

         bean类要求有一个无参构造方法

         可以使用工具自动创建对象

    1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)

    2.每个类可以有一个以上的构造器

    3.构造器可以有0个、1个或1个以上的参数

    4.构造器没有返回值

    5.构造器总是伴随着new操作一起调用

    Getter/Setter访问器方法

    目的是不让属性直接暴露出来,而是通过方法(getter/setter)间接地访问属性

     好处是:

        可以控制只读、只写

        还可以在赋值时进行转换、验证等操作

        可以在获取值时进行转换或修改

     

    继承

       没有指定父类,默认都从Object类继承

       使用extends关键字可以指定父类

      如果要覆盖或重写父类的方法,最好标记@Override注解(Annotation

    注解是可以附加到类元数据上的对象

       反射是获取类元数据信息的编程接口

    抽象类

    abstract标记

    不需要实例化,只为继承而存在

    抽象方法

        不为调用,只为继承

         abstract标记,没有方法体!

    抽象类中既可以有抽象方法也可以有非抽象方法!

    在继承体系中子类可以通过super关键字访问父类

        调用父类构造方法

             Super()

        调用本类构造方法

             This()

    访问父类的属性

           Super.属性名

     调用父类的方法

           Super.方法名()

    如果父类有无参构造方法,子类可以不显式调用super(),如果没有无参构造方法,必须手动显式调用super(xxx),否则报编译错误。

    当父类同时存在无参和有参构造方法时,默认调用无参构造方法。

    当未写任何构造方法时,编译期自动帮你添加一个无参构造方法,其他同上。

    编译器是会自动在子类的构造行数中, 在首行添加"super();", 这么一个语句,用来初始化父类的数据;

    如果没有的话, 编译的时候,无法找到父类的无参构造函数,就无法绑定运行时候调用哪个父类的构造函数,编译的时候就会报错啦;

    所以记得在以前学习的时候, 很多书籍都是让重载构造函数的时候, 记得添加一个无参的构造函数



    作业

    1.

    Triangle  三角形

    Parallelogram  平行四边形

    Sector     扇形

    2.

    实现oo版的单位转换


     

  • 相关阅读:
    [Android应用开发] 01.快速入门
    [wordpress使用]004_导入多媒体
    【Python3爬虫】使用异步协程编写爬虫
    【Python3爬虫】斗鱼弹幕爬虫
    Pycharm2018永久破解的办法
    【Python3爬虫】大众点评爬虫(破解CSS反爬)
    【Python3爬虫】用Python发送天气预报邮件
    【Python3爬虫】猫眼电影爬虫(破解字符集反爬)
    【Python3爬虫】微博用户爬虫
    【Python3爬虫】拉勾网爬虫
  • 原文地址:https://www.cnblogs.com/yangxiansen/p/7860057.html
Copyright © 2020-2023  润新知