Java类和对象(2)

🐵本文继续讲解类和对象相关知识


一、封装

封装就是将对象的属性和实现方法隐藏起来,外部无法获得具体的实现细节,只对外公开接口和对象进行交互,将对象的属性隐藏起来的办法就是用关键字private,被private修饰的成员变量或成员方法只能在当前类中使用

class Student {
    private String name; //被private修饰
    public int age;
    
    //设置姓名
    public void setName(String name) {
        this.name = name;
    }

    //获取姓名
    public String getName() {
        return this.name;
    }
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.age = 12; //age是被public修饰的所以可以访问
        //student.name = "Sans"; //这样写编译会报错
        student.setName("Sans"); //只能使用公开的方法来设置学生对象的姓名
    }
}

二、访问限定修饰符

访问限定修饰符包括public、private、protected三种,当它们修饰成员变量和成员方法时会限定对成员变量和成员方法的访问

访问范围publicprivate没有修饰符protected

同一包中的同一类

✔️✔️✔️✔️
同一包中的不同类✔️✔️✔️
不同包中的子类✔️✔️
不同包中的非子类✔️

上面的表格中【不同包中的子类】【不同包中的非子类】【protected】今后会讲,接下来先对包的概念进行讲解

三、包

在Java中有许多类,为了更好的管理这些类就有了包,包在底层就是一个文件夹,文件夹中存在着Java提供给我们的类,同时我们也可以自定义一个包:

包名一般是域名逆置,比如我们可以这样写包名:com.test.www,这样写就会产生com、test、www这三个包,在src的路径下也能看到这三个文件夹,假如在www这个包里创建一个类,在第一行就会通过package关键字显示这个类所在的包的路径:

package com.test.www;

public class Test1 {
}

如果我们没有自己创建包而是在src里直接新建了一个类,在第一行并没有显示包的路径,此时这个类在默认的包中;而当在一个包中创建其它包的类的对象时,则需要进行导包,要用到import关键字

package test1;
import com.test.www.Test1; //导包

public class Num {
    public static void main(String[] args) {
        Test1 test1 = new Test1(); //在test1包中创建刚刚在www包中创建的Test1类的对象
    }
}

之前在使用Scanner从键盘输入数据时也需要导包

import java.util.Scanner; //导包

public class Scan {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
    }
}

注意:import无法导入默认包中的类

四、static成员

4.1 static修饰成员变量

被static修饰的成员变量叫做静态成员变量,静态成员变量不属于任何对象,它是所有对象的共同属性

public class Num {
    public static int a = 10;
    public static void main(String[] args) {
        Num num1 = new Num();
        Num num2 = new Num();
        
        System.out.println(num1.a); //10
        System.out.println(num2.a); //10
    }
}

正如刚刚说的,静态成员变量不属于任何对象,所以上述代码的num1.a是不合理的(这样写并不会报错)建议以【类名.】的形式来访问静态成员变量

System.out.println(Num.a);

4.2 static修饰成员方法

被static修饰的成员方法叫做静态成员方法,静态方法也不属于任何对象,它是类的方法;静态方法一般用来访问静态成员变量

class Test {
    private static int a = 10; //a同时被private和static修饰
    public static int getA() {
        return a;
    }
}
public class Num {
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(Test.getA());
    }
}

1.在静态方法中不能直接访问非静态成员变量,如果要访问可以创建该成员变量所在类的实例化对象,通过对象来访问成员变量

2. 静态方法中不能有this引用,所以在静态方法内部不能调用非静态方法,因为非静态方法的第一个参数就是this引用

五、代码块

“{}”“{}”包含的一段代码组成代码块,在Java中代码块有普通代码块实例代码块静态代码块

5.1 普通代码块

普通代码块定义在方法内,其使用场景很少

public static void main(String[] args) {
    {
        int x = 0;
    }
    int x = 1; //上一个x是定义在普通代码块的局部变量,其作用域只限定在普通代码块内,因此再定义一个x也不会报错
    System.out.println(x); //1
}

5.2 构造代码块

构造代码块(也叫实例代码块)定义在类内、方法外,其一般是用来初始化成员变量的,构造代码块在实例化对象时就会被执行

public class Code {
    public int x;
    public int y;
    {
        this.x = 1;
        this.y = 2;
    }
    public static void main(String[] args) {
       Code code = new Code(); //这条语句执行完后,其对象的x和y就被初始化了
    }
}

5.3 静态代码块

被static修饰的代码块称为静态代码块,静态代码块定义在类内、方法外,一般用来初始化静态成员变量

public class Code {
    public static int x;
    public int y;
    static {
        x = 1; //这里不能使用this引用,因为静态成员变量不属于任何对象
    }
    public static void main(String[] args) {
       Code code = new Code();
    }
}

1. 静态成员变量是属于类的,因此在类被加载时就会被执行,比main方法执行顺序还要高

2. 由于一个类只会被加载一次,所以不管实例化了多少对象静态代码块都只会执行一次

5.4 静态代码块,构造代码块,构造方法的执行顺序

public class Code {
    
    {
        System.out.println("构造代码块");
    }

    static {
        System.out.println("静态代码块");
    }

    public Code() {
        System.out.println("构造方法");
    }
    
    public static void main(String[] args) {
       Code code = new Code();
    }
}

静态代码块在类加载时执行,因此最先执行,构造代码块始终优先于构造方法


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四入进博会,优衣库围绕科技可持续演绎“服装进化论”

11月5日,第六届中国国际进口博览会在上海拉开帷幕。这些年来,进博巨大的平台效应,使其成为各个行业头部品牌的秀场,也持续为消费者、产业链带来惊喜。 今年,也是全球服装界科技知名品牌——优衣库的第四次进博之旅。从…

2023年云计算发展趋势浅析

​​​​​​​ 云计算的概念 云计算是一种通过互联网提供计算资源和服务的模式。它允许用户通过网络访问和使用共享的计算资源,而无需拥有或管理这些资源的物理设备。云计算的核心理念是将计算能力、存储资源和应用程序提供给用户,以便随时随地根据需要…

模型剪枝算法——L1正则化BN层的γ因子

ICCV在2017年刊登了一篇经典论文《 Learning Efficient Convolutional Networks through Network Slimming》。在神经网络的卷积操作之后会得到多个特征图,通过策略突出重要的特征达到对网络瘦身的目的。在该论文中使用的剪枝策略就是稀疏化BN层中的缩放因子 。 Bat…

Navicat16连接不上mysql

博主是因为服务里MySQL没启动, 如果确定自己的数据库正确无误的朋友就可以退出寻找其它解决办法了。 如图,一打开navicat就初始化,啥都没有,也连接不上 1,搜索里搜【服务】找到MySQL, 发现MySQL未启动。点击…

MySQL 数据目录和 InnoDB 表空间补充知识:详细结构

1. 数据目录 在Ubuntu下,MySQL的数据目录为/var/lib/mysql 1.1 数据库在文件系统中的表示 (1)创建数据库时,会在数据目录下创建一个与数据库名同名的子目录。(除了information_schema这个系统数据外) &…

Linux应用开发基础知识——Framebuffer 应用编程(四)

前言: 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame 是帧的意 思,buffer 是缓冲的意思,这意味着 Framebuffer 就是一块内存,里面保存着 一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值,假设…

聊点技术|100%降本增效!Bonree ONE 通过 Clickhouse实现了

10月20日,数智融,ONE向新——博睿数据2023秋季产品发布会圆满落幕,全新一代一体化智能可观测平台Bonree ONE 2023秋季正式版焕新发布,重点升级了数据采集、全局拓扑、数据分析、会话回放等多个功能模块,为组织提供了更…

苹果手机发热发烫是什么原因?看完这篇你就知道了!

苹果手机以其卓越的用户体验和优秀的性能得到了广大用户的喜爱和追捧。在日常使用苹果手机时,我们可能会遇到手机发热发烫的情况。那么,苹果手机发热发烫是什么原因呢?小编将为大家解析这一问题的原因,并为您提供相应的解决方案&a…

Java开发者的囧境:那些让你苦笑不得的Bug

Java开发者的囧境:那些让你苦笑不得的Bug 《Java开发者的囧境:那些让你苦笑不得的Bug》摘要引言1. 编码时的“眼瞎病”小心!变量名不要写错了哦!情景描述建议与注意事项代码示例扩展 2. 时间的“穿越者”Bug原来是发生在几天前的代…

Google Analytics优缺点分析

Google Analytics是一款广泛使用的网站分析工具,它能够帮助网站和应用程序的拥有者收集和分析数据,并提供有关用户行为、流量来源和转化率等方面的详细见解。本文小编将讲讲关于Google Analytics的优缺点分析。 一、Google Analytics优点 1、免费使用&a…

rhcsa-压缩和解压缩

.zip: zip 程序压缩打包的档案;(很常见,但是因为不包含文档名编码信息,跨平台可能会乱码).rar: rar 程序压缩打包的档案:(在windows上很常见,但是是商业软件。gz: gzip 程序压缩的档案;(linux目前使用最广泛的压缩格式).bz2: bzip2 程序压…

利用百度地图api获取经纬度和uniapp定位计算距离

获取百度地图api,成为开发者,去控制台创建应用得到一个ak就可以了 百度地图开放平台网址:百度地图开放平台 | 百度地图API SDK | 地图开发 后端是node // 根据百度api地址获取经纬度 https://lbsyun.baidu.com/async getLocation(val) {try …

数字滤波器分析---零极点分析

数字滤波器分析---零极点分析 zplane 函数绘制线性系统的极点和零点。 例如,在 -1/2 处为零且在 0.9e−j2π0.3 和 0.9ej2π0.3 处有一对复极点的简单滤波器为 zer -0.5; pol 0.9*exp(j*2*pi*[-0.3 0.3]); 要查看该滤波器的零极点图,您可以使用 z…

网络安全(黑客)自学笔记1.0

前言 今天给大家分享一下,很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。 算上从学校开始学…

智慧在线拜佛上供品花供果祈福求愿公众号开发

智慧在线拜佛上供品花供果祈福求愿公众号开发 在线点灯祈福:用户可以在线选择点灯祈福的数量和供养的香灯类型,进行祈福祈愿。 上供品花:用户可以选择不同的鲜花供养,包括鲜花种类、数量和价值,以及写上心愿祝福语。 …

磁盘的分区、格式化、检验与挂载 ---- fdisk,mkfs,mount

磁盘的分区、格式化、检验与挂载 磁盘管理是非常重要的,当我们想要再系统里面新增一块磁盘使用时,应执行如下几步: 对磁盘进行划分,以建立可用的硬盘分区 (fdisk / gdisk)对硬盘分区进行格式化&#xff0…

Map and Set

map and set 文章目录 map and set前言搜索树<1> 操作-查找<2> 操作-插入<3> 操作-删除<4> 代码展示<5> 性能分析 Map 和 Set 概念及应用场景Map 和 Set 模型分析Map 的使用<1> Map常用方法说明<3> TreeMap 演示<2> Entry 内部…

Android逆向fiddler抓包工具——理解HTTP协议

HTTP协议格式 HTTP协议是一种应用非常广泛的应用层协议&#xff0c;当我们在浏览器中输入一个URL(“网址”)时&#xff0c;浏览器就会给客户端发送一个HTTP请求&#xff0c;服务器收到请求之后&#xff0c;就会返回一个HTTP响应。 为了能够看到HTTP请求和响应的详细内容&…

最新整理【剑侠情缘龙雀修复BGU版】linux服务端带授权后台+详细教程+包进游戏

搭建资源下载地址&#xff1a;最新整理【剑侠情缘龙雀修复BGU版】linux服务端带授权后台详细教程包进游戏 - 海盗空间

卷积神经网络中参数量的计算原理及方法

手动计算参数量: 1. 卷积层参数计算方法: 参数量计算公式 卷积核宽度 * 卷积核高度 * 输入层通道数 * 输出层通道数 bias(输出层通道数) 注意:池化层没有参数(只是在已知数据区域里求个最大值)输入层通道数就是上层的卷积核数量 输出层通道数等于卷积核个数:输入层通道数经过…