美文网首页
Java封装

Java封装

作者: 笔头还没烂 | 来源:发表于2023-03-29 14:17 被阅读0次

一、面向对象的三大特征:

  1. 封装

    • 将类的某些信息隐藏在类内部,不允许外部程序直接访问

    • 只能通过该类提供的方法来实现对隐藏信息的操作和访问

    • 隐藏对象的信息

    • 留出访问的接口

    • 特点:

      • 只能通过规定的方法访问数据

      • 隐藏类的实现细节,方便修改和实现

    • 实现步骤

      • 第一步:修改属性的可见性:设为 private

      • 第二步:创建 getter/setter 方法:设为 public 用于属性的读写

      • 第三步:在 getter/setter 方法中加入属性控制语句:对属性值的合法性进行判断

      • Cat.java 中的代码

        /**
         * 宠物猫类
         */
        public class Cat {
            //修改属性的可见性----private,限定只能在当前类内访问
            //成员属性:昵称、年龄、体重、品种
            private String name;//昵称
            private int month;//年龄
            private double weight;//体重
            private String species;//品种
        
            public String getName() {
                return name;
            }
        
            public void setName(String name) {
                this.name = name;
            }
        
            public int getMonth() {
                return month;
            }
        
            public void setMonth(int month) {
                if (month <= 0) {
                    System.out.println("输入信息有误,宠物猫的年龄必须大于0");
                    return;
                }
                this.month = month;
            }
        
            public double getWeight() {
                return weight;
            }
        
            public void setWeight(double weight) {
                this.weight = weight;
            }
        
            public String getSpecies() {
                return species;
            }
        
            public void setSpecies(String species) {
                this.species = species;
            }
        
            public Cat(){
                System.out.println("我是一个无参的构造方法");
            }
        
            public Cat(String name,int month,double weight,String species) {
                this();
                this.name = name;
                this.setMonth(month);
                this.weight = weight;
                this.species = species;
            }
            //成员方法:跑动、吃东西
            //跑动
            public void run(){
                System.out.println("小猫会跑");
            }
            //吃东西
            public void eat() {
                System.out.println("小猫吃鱼");
            }
        }
        
      • CatTest.java 代码

        public class CatTest {
           public static void main(String[] args) {
           //对象实例化操作
           Cat cat = new Cat("花花",3,1000,"英国短毛猫");
           System.out.println("年龄是:"+cat.getMonth());
           //测试
           cat.eat();
           cat.run();
           }
        }
        

      输出结果如下:

      我是一个无参的构造方法
      年龄是:3
      小猫吃鱼
      小猫会跑

    • 访问修饰符

      • 除了private、public,还有什么呢?

      • 访问权限是怎么样的?

      • 注意:

        • 只有 getXXX 方法的属性是只读属性;

        • 只有 setXXX 方法的属性是只写属性;

  2. 继承

  3. 多态


在 Java 中如何进行不同类文件的管理的呢?

    • 创建

      • 命名:域名倒序+模块名称+功能名称
    • 作用

      • 管理Java文件;

      • 解决同名文件冲突:Java中一个包里不能存在同名类。

    • 定义包

      package com.模块名称.功能名称;//命名方式
      

      Ps:

      • 必须放在 Java 源文件中的第一行;

      • 一个Java源文件中只能有一个package语句;

      • 包名全部英文小写

      • 命名方式:域名倒序+模块+功能;

    • 如何实现跨包的类调用

      • 语法:import 包名.类名;

      • 导包有三种方式,如下:

        //通过 import 关键字导包,加载com.animal 下所有的类
        (1)import com.animal.*;
        //通过 import 关键字导包,加载指定包下指定的类
        (2)import com.animal.Cat;
        //在代码中直接通过包名.类名的方式引用要用到的类
        (3)com.animal.CatTest text = new com.animal.CatTest();
        
        如下图所示: 05类加载的顺序.png
        • 当不同的包存在相同类名的类(如上图中多个包存在相同类名的类 Cat 类),并且被导入到同一个java文件时,加载类的顺序跟 import 导入语句的位置无关。由于第二种包名.类名的加载类的方式会更清晰,因此程序会优先以第二种方式加载导入的类。如上图,虽然 machanics 包和 animal 包都有 Cat 类,但是可以看到,Test 测试类在程序编译后导入的类是 animal 下的。如果需要加载 machanics 下的 Cat 类,就需要使用第三种方式。

        • com 包里面包含多个子包 animal 和 mechanics,不能直接通过“ import com.;* ”语句一次性导入多个子包中所有的类。import 语句只能用于导入一个包下一个或多个 java 文件对应的类,不能用于导入一个包下的还有子包的情况。


Tips: 常用系统包

  • java.lang:包含 Java 语言基础的类,该包系统加载时默认导入如:System、String、Math

  • java.util:包含 Java 语言中常用工具,如:Scanner、Random

  • java.io:包含输入、输出相关功能的类,如:File、InputStream


static 关键字

  • 在 Java 程序中可以和哪些信息组合使用?

    • static 可以修饰属性、方法。

    • static 不能用来修饰类。类的修饰符只允许是:public、abstract 和 final

    • static 不能用来修饰局部变量。

  • 用它修饰的信息具有哪些特征 呢?

    • static + 属性:称为静态成员、类成员

      • 类对象共享

      • 类加载时产生,销毁时释放,生命周期长

    • static + 方法:称为类方法, 静态方法

    • static + 类:不存在

    • static + 方法内局部变量:不存在

    静态成员随类的加载而产生,直至类的销毁才回收。

  • 调用方式

    • 类名.静态成员;

      Cat.静态成员
      
    • 对象名.静态成员;

      (1)Cat cat = new Cat();
         cat.静态成员;
      
      (2)this.静态成员;(this表示当前对象)
      
    • 可以直接调用静态成员;

    • 静态方法中不能直接访问同类中的非静态成员

    • 静态方法中不能使用 this

    • 可以通过实例化对象后,以对象调用的方式完成非静态成员的调用。


代码块:

  • 语法:通过 {} 可以形成代码块

  • 分类:

    • 普通代码块:直接定义在成员方法中的代码块。

    • 构造代码块:直接定义在类中的代码块。

    • 静态代码块:当构造代码块前面加上 static 关键字时,该构造代码块会升级为静态代码块。

  • 代码块的调用执行:

    • 单独使用的情况

      • 普通代码块

        • 特点:每次调用方法的时候顺序执行,先出现先执行;
      • 构造代码块

        • 特点:每次创建对象时都会调用
      • 静态代码块

        • 特点:类加载的时候执行,并且只会执行一次。
    • 当一个类同时存在构造代码块和静态代码块:

      • 静态代码块的执行顺序优于构造代码块,即静态代码块会首先执行。如果存在多个静态代码块,则按顺序执行,先出现先执行。

      • 静态代码块执行完成后,才会执行构造代码块。构造代码块的执行顺序优于构造方法,即会在构造方法之前先执行。如果存在多个构造代码块,则按顺序执行,先出现先执行。

  • 使用场景:

    • 如果有些信息只希望在类加载的时候运行一次,则可以将它放入静态代码块中。

相关文章

  • Java 学习笔记(14)—— 文件操作

    java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java....

  • 2018-03-29

    Java中常量封装案例

  • java返回结果集封装

    java返回结果集封装

  • Android面试题准备

    Java相关 1.Java的特性(封装、继承、多态) 封装 1. 封装就是把一个类的内部信息隐藏在类的内部,使得外...

  • Java笔记

    Java基础 Java面试通关要点 1.面向对象的特征 封装 继承 多态 封装继承多态 2.final,final...

  • SharedPreference简单封装,支持Java Bean

    概述 封装一个支持Java Bean,Java List,Java Map的SharedPreference。(2...

  • Java 封装

    Java 封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细...

  • Java 封装

    一、实现Java封装的步骤 修改属性的可见性来限制对属性的访问(一般限制为private),例如: public ...

  • Java封装

    在面向对象程式设计方法中,封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的...

  • Java封装

    在面向对象程式设计方法中,封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的...

网友评论

      本文标题:Java封装

      本文链接:https://www.haomeiwen.com/subject/qyjfddtx.html