JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)

chatgpt/2023/9/26 13:18:49

目录

一、封装

1.封装:从语法来看,就是被private修饰的成员变量或者成员方法。只能在当前类当中使用。

2.快捷键,自动生成set或者get方法

 3.限定访问修饰符(private、 protected、public)

public:可以理解为一个人的外貌特征,谁都可以看得到

default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了

private:只有自己知道,其他人都不知道

二、包的概念(封装扩展涉及到)

简单说,包就是一个文件夹,里面有很多类,用来组织和管理类的,

就像数组里用到的包 import java.util.Arrays;

java.util就是一个包,里面包含了很多类(例如:Arrays等),类里有很多方法(Arrays.sort()等)

(1)包的导入 

(2)尽量不要使用通配符*适配所有类,可能会出现问题

(3)自定义包 

三、再次理解封装(默认封装)

 1.默认情况下封装:不同包中,无论子类或者非子类,都不能访问!!!(同一个包里可以)

default在代码当中是没有的,不用写上去,是默认的意思。

(1)在不同包里创建了java文件,无法访问类

 (2)同一个包里创建类,可以访问类

四、static静态 - 属于类(不属于对象)

(1)静态成员

【静态成员变量特性】

 (2)静态方法

【静态方法特性】


一、封装

        面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节
        封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。
         拿洗衣机举例,我们只管把衣服和洗衣液扔进去。而洗衣机的构造,零件,组成这些细节,我们是看不见的,在出厂前已经被隐藏了,我们看见的仅仅就是一个大箱子洗衣机。
public class Person {private String name;public int age;public  Person(){System.out.println("不带参数的构造方法!");}public Person(String name, int age) {this.name = name;this.age = age;System.out.println("带2个参数的构造方法!!!");}public void sleep(){System.out.println(this.name+"正在睡觉~~");}
}
public class Test2 {public static void main(String[] args) {Person person = new Person();person.name = "zhangsan";}
}

1.封装:从语法来看,就是被private修饰的成员变量或者成员方法。只能在当前类当中使用。

 在使用public的时候,引用赋值很正常

但是,换成private之后,就报错了,提示都没有了。

被private修饰之后,访问权限变小了,此时只能在类内使用,这就是封装。

虽然用private对name和age这些属性封装了,但是可以通过public公开的方法来修改或者获取当前的name、age属性

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

 运行结果

2.快捷键,自动生成set或者get方法

 3.限定访问修饰符(private、 protected、public)

public:可以理解为一个人的外貌特征,谁都可以看得到

default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了

private:只有自己知道,其他人都不知道

二、包的概念(封装扩展涉及到)

        就像听歌一样,可以分为民族音乐、流行音乐、轻音乐等等。可以建立歌单分类,组织和管理里面的歌曲。

        包:包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一 个包中的类不想被其他包中的类使用。

        包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在 不同的包中即可

简单说,包就是一个文件夹,里面有很多类,用来组织和管理类的,

就像数组里用到的包 import java.util.Arrays;

java.util就是一个包,里面包含了很多类(例如:Arrays等),类里有很多方法(Arrays.sort()等)

(1)包的导入 

 假如要使用一个Date类,就会弹出提示相关的包

 通常直接选择想要的回车,包就会自动加上了

但是如果不加包,也可以这样写 包名.类

(2)尽量不要使用通配符*适配所有类,可能会出现问题

例如:假设现在我要用到的类,需要导入这两个包

import java.util.Arrays;
import java.util.Date;
import java.util.Arrays;
import java.util.Date;public class Test2 {public static void main(String[] args) {Date date = new Date();int[] array = {1,2,3};System.out.println(Arrays.toString(array));}

 其实可以这样

import java.util.*;

看似没问题,实则容易起冲突

假如有多个包,旗下都有同名的类,就会报错。

import java.util.*;
import java.sql.*;

        因为此时,util和sql这两个包下,都有叫Date的类,那么此时使用Date会冲突,不知道使用的是哪一个包下的Date

 所以建议,导入具体的包,不要用*

(3)自定义包 

创建一个包

 包的命名一般采用公司域名的颠倒形式

 其实就是建立了三个文件夹,再这三个文件夹里都可以创建包

 然后此时我再这个www里创建了一个TestOne.java

三、再次理解封装(默认封装)

 1.默认情况下封装:不同包中,无论子类或者非子类,都不能访问!!!(同一个包里可以)

default在代码当中是没有的,不用写上去,是默认的意思。

(1)在不同包里创建了java文件,无法访问类

 在TestTwo里访问TestOne里的name,无法访问

可以看到,name打出n没有提示,即使写上name之后,也报红了err

 (2)同一个包里创建类,可以访问类

 理解了包和这个default,这样就可以懂得前面的private和public了

四、static静态 - 属于类(不属于对象)

(1)静态成员

       在Java 中,被 static 修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对 象,是所有对象所共享的

【静态成员变量特性】

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生 ( 即:随类的加载而创建,随类的卸载而销毁 )

例如:一个班级有很多个学生,这些同学张三,李四,王五,它们的姓名年龄都是不同的,在实例化这些对象的时候,这些属性就是不同的。而相同的是,他们都是属于同一个班级,这样的被所有对象共享的就是static静态成员 。用static来修饰

 静态成员变量:通过类名来访问(它不属于对象,不用通过对象访问)

 (2)静态方法

静态方法特性

1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名 . 静态方法名 (...) 方式调用,更推荐使用后者
3. 不能在静态方法中访问任何非静态成员变量

 这个调用时错的,因为name是属于对象的,name的调用是需要对象的引用来调用的。

不可以 在一个不依赖于对象的方法里,调用一个依赖对象的成员或者方法。本身就是有问题的,是错误的!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5313895.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

《cuda c编程权威指南》03 - cuda小功能汇总

1. 计时 1.1 linux #include <sys/time.h>double cpuSecond() {struct timeval tp;gettimeofday(&tp, NULL);return ((double)tp.tv_sec (double)tp.tv_usec*1e-6); }// 调用 double start cpuSecond(); kernel_name << <grid, block >> > (ar…

生态伙伴 | 华秋硬创联合长虹创投,共同打造更优生态系统

01大赛介绍 中国硬件创新创客大赛始于2015年&#xff0c;由深圳华秋电子有限公司主办&#xff0c;至今已经成功举办八届&#xff0c;赛事范围覆盖华南、华东、华北三大地区&#xff0c;超10个省市区域。 大赛影响了超过45万工程师群体&#xff0c;吸引了35000多名硬创先锋报名参…

如何在线制作闪图?手把手教你快速生成GIF闪图

网上那种卟玲卟领的闪动GIF图片效果非常的炫丽&#xff0c;这种GIF闪图是怎么制作的呢&#xff1f;很简单&#xff0c;只需要使用专业的gif制作&#xff08;https://www.gif.cn/&#xff09;工具-GIF中文网&#xff0c;上传多张颜色、大小不同&#xff0c;内容相同的jpg、png格…

【外卖系统】文件上传与下载

文件上传 文件上传又称upload&#xff0c;将本地图片、视频等文件上传到服务器上&#xff0c;供其他用户下载或者浏览。 form表单&#xff1a;HTML中的form元素用于创建一个包含表单字段的区域&#xff0c;用户可以在该区域输入数据&#xff0c;并通过提交表单将数据发送到服务…

STM32使用HAL库中外设初始化MSP回调机制及中断回调机制详解

STM32使用HAL库之Msp回调函数 1.问题提出 在STM32的HAL库使用中&#xff0c;会发现库函数大都被设计成了一对&#xff1a; HAL_PPP/PPPP_Init HAL_PPP/PPPP_MspInit 而且HAL_PPP/PPPP_MspInit函数的defination前面还会有__weak关键字 上面的PPP/PPPP代表常见外设的名称为…

9.环境对象和回调函数

9.1环境对象 指的是函数内部特殊的变量this&#xff0c;它代表着当前函数运行时所处的环境 作用&#xff1a; 弄清楚this的指向&#xff0c;可以让我们代码更简洁 ➢函数的调用方式不同&#xff0c;this指代的对象也不同 ➢[谁调用&#xff0c;this 就指代谁] 是判断this指向的…

【C++】STL——vector的模拟实现、常用构造函数、迭代器、运算符重载、扩容函数、增删查改

文章目录 1.模拟实现vector1.1构造函数1.2迭代器1.3运算符重载1.4扩容函数1.5增删查改 1.模拟实现vector vector使用文章 1.1构造函数 析构函数 在C中&#xff0c;vector是一个动态数组容器&#xff0c;可以根据需要自动调整大小。vector类提供了几个不同的构造函数来创建和初…

【玩转Linux】Linux输入子系统简介

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…
推荐文章