15、JAVA入门——封装

简介: 15、JAVA入门——封装

一、封装


     1、封装概述

       (1)Java中封装的实质就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。


       (2)封装反映了事物的相对独立性,有效避免了外部错误对此对象的影响,并且能够对对象使用者由于大意产生的错误起到预防作用。


       (3)面向对象编程提倡对象之间实现松耦合关系。


       (4)封装的好处在于隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制修饰符,来限制不合理操作。


       (5)松耦合就是指尽量减少对象之间的关联性,以降低它们之间的复杂性和依赖性。


     2、封装的步骤

       (1) 修改属性的可见性


                       将类中的属性由public修改为private即可。


       (2) 设置setter/getter()方法


                       可以手动添加setter/getter()方法,也可以使用组合键Ctrl+Shift+S由系统添加。


       (3)设置属性的存取限制


                       在setter()方法中进一步利用条件判断语句进行赋值限制。


 代码展示:


 创建一个Car类


public class Car {
  private String name;
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
}

 创建一个使用Car类的测试类 CarTest类


public class CarTest {
  public static void main(String[] args) {
  // 创建Car类对象
  Car car = new Car();
  car.setName("QQ");
  System.out.println(car.getName());
  }
}


二、Java里的包


     1、包的概述

           Java中的包机制也是封装的一种形式。


           包主要有以下3个方面的作用:


           1)允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。


           2)防止命名冲突:Java中只有在不同包中的类才能重名。


           3)包允许在更广的范围内保护类、数据和方法。根据访问规则,包外的代码有可能不能访问该类。


           4)在同一个类中使用不同包中的同名类时,需要使用完整的包名来区别同名类。

     2、包的定义

           定义包的语法格式如下:


                 package 包名;


                    -->package是关键字。


                    -->包的声明必须是Java源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语句,设计的包需要与文件系统结构相对应。


                    -->在包命名时,要遵守以下编码规范:


        1)一个唯一的包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名com、edu、gov、net及org,通常使用组织的网络域名的逆序。


              例如,如果域名为Javagroup.net,可以声明包为“package net.javagroup.mypackage;”。


         2)包名的后续部分依据不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的组成来区分部门、项目、机器或注册名。


               如“package net.javagroup.research.powerproject;”。


               research:项目名


               powerproject:部门名

     3、包的使用

       (1)声明包的含义是声明当前类所在的包。


       (2)导入包的含义是声明在当前类中要使用到的其他类所在的包


               -->导入包使用import关键字。


               -->一个类中可以导入多个其他包


               -->导包语句在包语句之后、类定义语句之前。


      4、注意事项

(1)一个类同时引用了两个来自不同包的同名类

               必须通过完整类名来区分


public static void main(String[] args) {
  cn.bdqn.demo01.Penguin p1 = new cn.bdqn.demo01.Penguin();
  cn.bdqn.demo02.Penguin p2 = new cn.bdqn.demo02.Penguin();
  }

(2)每个包都是独立的,顶层包不会包含子包的类

(3)package 和 import 的顺序是固定的

package必须位于第一行(忽略注释行)

只允许有一个package语句

其次是import

接着是类的声明

        例:package cn.bdqn.demo01;   //非注释代码的第一个语句



三、Java访问修饰符


       1、类和类成员的访问控制

           (1)包实际上一种访问控制机制,通过包来限制和制约类之间的访问关系。


           (2)访问修饰符也同样可以限制和制约类之间的访问关系。


       2、类的访问修饰符

               public修饰符:公有访问级别


               默认修饰符(default):包级私有访问级别






2.png

       3、类成员的访问修饰符

1.gif

四、static关键字


       1、static特点

         (1)一个类可以创建n个对象。如果n个对象中的某些数据需要共用,就需要使用static关键字修饰这些数据。


         (2)Java中,一般情况下调用类的成员都需要先创建类的对象,然后通过对象进行调用。


         (3)使用static关键字可以实现通过类名加“.”直接调用类的成员,不需要创建类的对象。


         (4)使用static修饰的属性和方法属于类,不属于具体的某个对象。


       2、static修饰属性

         (1)用static修饰的属性称为静态变量或者类变量,没有使用static修饰的属性称为实例变量。


         (2)使用static修饰的属性不依赖于任何对象,用类名直接加“.”调用即可。


         (3)在实际开发中,用static关键字修饰属性的最常用场景就是定义使用final关键字修饰的常量。


         (4)使用final关键字修饰的常量在整个程序运行时都不能被改变,和具体的对象没关系,因此使用static修饰。


               如:static final int PERSON_LIVE = 1;


         (5)常量名由大写字母组成,多个单词之间使用下划线“_”分隔。


         (6)声明常量时一定要赋初值。


       3、static修饰方法

         (1)用static修饰的方法称为静态方法或者类方法,不用static关键字修饰的方法称为实例方法。


         (2)在静态方法中不能直接访问实例变量和实例方法。(需要使用对象访问)


         (3)在实例方法中可以直接调用类中定义的静态变量和静态方法。


       4、static修饰代码块

         (1)用static修饰的代码块称为静态代码块。


         (2)静态代码块随着类的加载一起执行


         (3)一个类中有多个静态代码块时,按照顺序从上往下依次执行,只执行一次


代码展示:


       定义一个StaticDemo01类


public class StaticDemo01 {
  // 定义静态变量
  static int num = 10;
  //定义一个普通变量
  int number =1000;
  //定义静态常量
  final static String STR = "hello world";
  // 定义静态代码块
  static {
  System.out.println("我是静态代码块2");
  }
  static {
  System.out.println("我是静态代码块1");
  }
  static {
  System.out.println("我是静态代码块3");
  }
  // 定义静态方法
  public static void test1() {
  System.out.println("我是静态方法");
  }
}


       定义一个测试类Text类来使用StaticDemo01类


public class Test {
  public static void main(String[] args) {
  //创建StaticDemo01类对象
  StaticDemo01 sd = new StaticDemo01();
  System.out.println(sd.num);
  System.out.println(StaticDemo01.num);
  sd.test1();
  StaticDemo01.test1();
  System.out.println("------------------");
  StaticDemo01 sd1 = new StaticDemo01();
  System.out.println(sd1.num);//10
  System.out.println("sd1中的number值:"+sd1.number);
  StaticDemo01 sd2 = new StaticDemo01();
  System.out.println(sd2.num);//10
  System.out.println("sd2中的number值:"+sd2.number);
  sd2.num = 100;
  sd2.number = 2000;
  System.out.println(sd2.num);//100
  System.out.println(sd1.num);//100
  System.out.println("sd2中的number值:"+sd2.number);
  System.out.println("sd1中的number值:"+sd1.number);
  }
}


效果展示:


 

1.gif

相关文章
|
23天前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
36 3
|
2天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
8天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
14天前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
49 5
|
11天前
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
26 1
|
18天前
|
Java 数据处理 开发者
Java多线程编程的艺术:从入门到精通####
【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
41 3
|
19天前
|
Java
Java中的多线程编程:从入门到精通
本文将带你深入了解Java中的多线程编程。我们将从基础概念开始,逐步深入探讨线程的创建、启动、同步和通信等关键知识点。通过阅读本文,你将能够掌握Java多线程编程的基本技能,为进一步学习和应用打下坚实的基础。
|
21天前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
39 4
|
1月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
46 1
java制作游戏,如何使用libgdx,入门级别教学
|
20天前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
16 1