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

news2024/12/29 10:16:47

目录

一、封装

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.coloradmin.cn/o/817069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python数学建模_2:灰色预测模型(GM(1,1))使用文档

灰色预测模型(GM(1,1))使用文档简介使用时机处理数据类型函数说明使用示例注意事项具体项目 灰色预测模型(GM(1,1))使用文档 简介 灰色预测模型(GM(1,1))是灰色系统理论的重要部分,常用于对包含不确定性的系统进行建模和预测。 使用时机 当数据量较小&#xff0…

树莓派通过天线+gps获取经纬度并调用高德地图api在地图上标点

完整项目为《基于机器视觉的行人和路面缺陷检测及其边缘设备部署》 完整功能视频演示地址:本科最后的课设:“车载系统的辅助系统——基于机器视觉的行人和路面缺陷检测”完结撒花*罒▽罒*_哔哩哔哩_bilibili 该博客介绍的功能为: 1&#xff1…

VS下开发Qt应用环境搭建

VS下开发Qt应用环境搭建 版本说明环境搭建步骤QT新增组件重新安装QTVS中的配置 版本说明 vs2019 QT5.14 我之前是按照QT基础组件的安装,但是这个安装只是最基础的组件,如果想要在VS中使用QT,还得安装其他组件,下面的安装流程、 …

轻松解决宝塔面板设置了授权IP访问,但是IP变动导致访问不了面板

为了宝塔面板的安全与隐蔽性,我们很多站长会设置授权IP,授权IP的作用是:设置访问授权IP,多个请使用逗号(,)隔开;注意:一旦设置授权IP,只有指定IP的电脑能访问面板! 但是很多站长不是通过专用的虚拟通道访问,用的都是宽…

【Python系列】Python基础语法轻松入门—从变量到循环

目录 写在前面 语法介绍 变量 数据类型 整数 浮点数 字符串 列表 元组 字典 运算符 算术运算符 比较运算符 逻辑运算符 条件语句 循环语句 图书推荐 图书介绍 参与方式 中奖名单 写在前面 Python 是一种高级、解释型的编程语言,具有简单易学…

恒心工程PMO运作实践︱恒丰银行苏州分行行长(拟)姜兆华

恒丰银行股份有限公司苏州分行党委书记、行长(拟),原总行金融科技部副总经理、恒心工程PMO办公室主任姜兆华先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:恒心工程PMO运作实践——以商业银行核…

京东的成功秘诀:找到自己独特而有效的商业模式

你知道京东为什么能够从一个卖电器的小网站发展成为中国最大的电商平台吗?如果京东一开始靠卖电器赚钱,不可能有今天,在十几年刘强东刚创业的时候,如果京东靠卖电器赚钱,你知道想当年的国美黄光裕和想当年的苏宁的张近…

磁盘均衡器:HDFS Disk Balancer

HDFS Disk Balancer 背景产生的问题以及解决方法 hdfs disk balancer简介HDFS Disk Balancer功能数据传播报告 HDFS Disk Balancer开启相关命令 背景 相比较于个人PC,服务器一般可以通过挂载多块磁盘来扩大单机的存储能力在Hadoop HDFS中,DataNode负责最…

F5 LTM 知识点和实验 7-使用SNATs处理流量

第七章:使用SNATs处理流量 SNATs: 传统的vs都是对目的地址和端口进行改变,而源地址没有改变,如果你需要对源地址和源端口进行更改,则需要使用SNAT能力,好处在于: 1、允许不可路由地址(网络内部)的设备获得可路由地址以进入网络外部。2、确保目标服务器通过BIG-IP系统返…

[Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

目录 0、CI/CD系统最终架构图规划IP地址 1、git配置Git下载pycharm配置gitidea配置git 2、GitLab安装与配置主机要求拉取镜像定义 compose.yml启动gitlab浏览器访问并修改密码查看登录密码修改密码 3、SonarQube 安装与配置拉取镜像修改虚拟内存的大小启动SonarQube登录 SonarQ…

5.2.16.静态映射操作LED3

5.2.16.静态映射操作LED3 5.2.16.1、添加驱动中的写函数 (1)先定义好应用和驱动之间的控制接口,这个是由自己来定义的。譬如定义为:应用向驱动写"on"则驱动让LED亮,应用向驱动写"off",驱动就让LED灭 1. 驱动文…

自定义Controller接口参数的值不能为空的校验

需求:在进入到相应Controller控制器前,需要先校验参数是否符合规范要求,如是否为空等等。 有人说,可以使用PathVariable里面的required属性控制,然而该属性只是代表参数是否必填,并不能校验参数的值是否满…

python_在K线找出波段_01_找出所有转折点

目录 写在前面: 需要考虑的几种K线图情况: 寻找所有转折点逻辑: 代码: 寻找转折点方法:找到第一个转折点就返回 循环寻找峰谷方法 主方法 调用计算: 返回: 在【PyQt5开发验证K线视觉想…

C++继承特性(1)——含义与继承方式的讲解

目录 1.继承的含义 2.继承的定义: 3.继承方式 例子1:基类的访问限定符为public,两个派生类的继承方式分别为public、protected时: 例子2: 基类的访问限定符为protected,两个派生类的继承方式分别为pub…

软件测试工程师的职业规划,你都做好了吗?

第一阶段:初级测试工程师 一般刚刚入门,熟悉基本的测试流程,此时已打基础为主。入门薪资一般在6000-8000元之间。 具体工作是: (1) 按照测试方案和流程对产品进行功能测试,检查产品是否有缺陷…

Java读取及生成pb文件并转换jsonString

Java读取及生成pb文件并转换jsonString 1. 效果图2. 原理2.1 Protocol Buffers是什么2.2 支持的语言2.3 根据.proto生成.java2.4 初始化及构建pb,读取,转jsonString 3. 源码3.1 address.proto3.2 PbParseUtil.java 参考 读取pb及生成pb文件pb文件转换jso…

vue-cli4升级到vue-cli5的踩坑记录

前言 最近对部分项目升级了vue-cli脚手架,记录一下 问题一: scss/less/css中无法引入public下的静态资源 问题描述 在样式文件中使用静态资源路径导致编译无法通过 错误信息如下: Module not found: Error: Cant resolve /img/login/lo…

框架的知识点整理

目录 1、什么是Spring框架?Spring框架有哪些主要模块? 2 、 使用Spring框架有什么好处? 3、Spring MVC 工作原理 1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个开源的轻量级的Java应用程序开…

MySQL主从复制及读写分离(三十四)

目录 MySQL主从复制 一、概述 1、MySQL Replication优点: 二、MySQL复制类型 1、异步复制(Asynchronous repication) 2、全同步复制(Fully synchronous replication) 3、半同步复制(Semisynchronous…

【构造】CF1758 C

Problem - 1758C - Codeforces 题意&#xff1a; 思路&#xff1a; 思路&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn2e510; const int mxe2e510;int N,x; int ans[mxn];void solve(){cin>>N>>x;if(N%x!0)…