zoukankan      html  css  js  c++  java
  • 0021 Java学习笔记-面向对象-包、构造器

    封装

    • 面向对象的三大特征:
      • 封装
      • 继承
      • 多态
    • 封装:
      • 将对象的状态信息隐藏,不允许外部程序直接访问
      • 通过该类提供的方法来访问和操作
    • 有啥用:
      • 隐藏类的实现细节
      • 在方法中加入控制逻辑,限制对成员变量的不合理访问,比如把年龄设置为1000岁
      • 进行数据检查,有利于保证对象信息的完整性
      • 便于修改,提高代码的可维护性

    访问控制符:

    • 访问控制符有四个:
      • private
      • 省略
      • public
      • protected
    • private:
      • 可用于成员变量、方法、构造方法
      • 表明被修饰成员只能在这个类的内部被访问
    • 省略:
      • 可用于成员变量、方法、构造方法、外部类
      • 表明这个被修饰成员可以被本包下的其他类访问
    • public:
      • 可用于成员变量、方法、构造方法、外部类
      • 表明这个被修饰成员可以被所有的类访问,不管是不是父子类、同包关系
    • protected:
      • 可用于成员变量、方法、构造方法
      • 表明这个被修饰成员可以被同包的类、其他包的子类访问
      • 一般是需要子类重写这个方法
    • 其他:
      • 外部类只能被public和省略两种修饰,不能用protected和private
      • 一个.java源文件,最多只能有一个public修饰的类,此时.java文件名必须跟public的类名相同
      • 如果.java文件内没有public修饰的类,那么.java文件名跟里面的类可以没有关系
    • 几条基本原则
      • 类的绝大部分成员变量都应使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才考虑用public
      • 有些方法只用于辅助其他方法的实现,也应用private修饰
      • 如果一个类主要用作其他类的父类,包含的大部分方法仅希望被其子类重写,不想被外界直接调用,则用protected
      • 希望暴露出来该其他类自由调用的方法用public修饰,因此构造方法和外部类一般都用public

    • 包存在是为什么?
      • 为了解决包重名的问题
      • 也为了更方便的管理源文件和字节码文件
    • 怎么做?
      • 包的命名:全用小写字母,不用驼峰命名法,层级之间用点隔开
      • 命名结构:公司域名反写+项目名+模块名
      • .java源文件的非注释语句的第一行,用package语句指定包名,一个.java源文件只能属于一个包
      • .class文件放在跟包结构相同的路径下
      • 一般将.java和.class文件用相同的文件目录结构管理
    • Java的常用包
      • java.lang:Java语言的核心类,自动导入,
      • java.util:工具类/接口、集合框架/接口
      • java.net:网络编程
      • java.io:输入输出
      • java.text:格式化
      • java.sql:JDBC数据库编程
      • java.awt:用于构建图形用户界面
      • java.swing:用于构建平台无关的GUI程序
    • 跨包访问的问题:
      • java.lang下面的类都是Java的核心类,系统会自动导入,比如用System.out.println()时没有让你导包
      • 访问同一个包下面的类,直接用类名即可
      • 访问其他包的类:
        • 用类的全名,比如:java.io.File file=new java.io.File("E:");
        • 先import导入,再直接用类名访问,比如
          import java.io.File;
          File file=new File("E:");
        • 如果import导入后,还有同名的包,比如java.util.Date和java.sql.Date,还得用类的全名访问
        • 可以用通配符"*" 一次导入一个包下的所有类,比如:import java.io.*,但不能导入这个包下的子包下的类
    • 静态导入:
      • import除了可以导包,还可以导入一个类的一个或全部类变量、类方法
      • 不导入Math类的静态方法和变量,那么在调用方法和变量时,得这样写:Math.sqrt(256);Math.PI
      • 导入Math类的静态方法和变量:import static java.lang.Math.*;则可以这样写:sqrt(256);PI;

    构造方法

    • 构造方法的名字跟类的名字相同
    • 构造方法用于创建实例时的初始化,注意是初始化,而不是说创建实例就全靠它
    • new关键字调用构造器,系统为要创建的对象分配内存空间,并执行默认初始化,这个对象便产生了,此时还没构造器的事,这个对象还不能被外部访问,只能在构造器中用this引用,然后才由构造器给该对象进行初始化,这个对象再作为返回值返回给引用变量
    • 如果不写构造方法,系统默认添加一个无参构造方法,各实例变量都将被赋给默认值:0,0.0,false,null。如果写了构造器,那么系统就不再提供无参构造;不过一般写类,都要写个无参构造
    • 构造方法可以重载
    • 在一个构造方法里,想调用另一个构造方法,用this()调用,且得写在这个构造方法的第一行

    其他:

    • 如果一个类的每个实例变量都是用了private修饰,且都提供了public的getter和setter方法,那么这个类就是符合JavaBean规范的类
  • 相关阅读:
    表达式与运算符
    Python3 从零单排22_异常处理
    Python3 从零单排21_元类
    Python3 从零单排20_方法(绑定&内置)&反射
    Python3 从零单排19_组合&多态
    Python3 从零单排18_封装
    Python3 从零单排17_类的继承
    Python3 从零单排16_面向对象基础
    Python3 从零单排15_urllib和requests模块
    Python3 从零单排14_flask模块&mysql操作封装
  • 原文地址:https://www.cnblogs.com/sonng/p/6069933.html
Copyright © 2011-2022 走看看