当前位置: 首页 > news >正文

javaSE类和对象(下)

目录君

    • 1.封装
    • 2.访问限定符
    • 3.包的定义及使用
    • 4.static成员变量
    • 5.static成员方法
    • 6.代码块及其分类
      • 实例代码块
      • 静态代码块
      • 静态代码块与实例代码块的执行顺序
      • static成员变量(类变量)初始化

1.封装

面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。

封装的概念

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互,对类的实现细节进行隐藏,只对外提供接口进行访问,使用private关键字修饰成员变量或者成员方法,降低代码耦合度 简单举个例子,我们平时使用的电脑,我们在使用电脑时都是通过usb接口键盘,鼠标实现与电脑进行交互,而并没有直接对电脑中的硬件等进行操作,我们看不见其中的内部操作,但能通过一个接口访问电脑的方式。这就是封装的简单例子

2.访问限定符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符

public:允许不同包中的不同类之间进行访问,可以理解为一个人的外貌特征,谁都可以看得到
default: 最大访问权限是允许同一个包中不同类之间进行访问,对于自己家族中(同一个包中)的秘密,对于其他家族的人来说就是隐私
private:只允许在同一包中同一个类中进行访问,可以理解为自己的小秘密只有自己知道,其他人都不知道
protected:被该修饰符修饰的成员变量或成员方法,最大权限是允许不同包中的子类中访问,(注意是在不同包的子类,意思是如果这两个子类来自不同的包,那只能在继承的子类中使用,注意如果子类和父类在两个不同的包内时,父类的访问修饰限定符一定是public,因为如果不是的话,那就只有包权限的访问限定修饰符了,那此时这个类就只能在当前包中使用了,自然也就不能被其他包中的类继承了)
在这里插入图片描述

3.包的定义及使用

1.概念:任何操作系统中,都有一个统一的共识:同一个目录下不能存在相同的文件名称,但是,实际开发中又很难避免命名冲突矛盾的问题,为此,项目中往往会引入包的概念,所谓的包,存储时就是一个文件夹,在不同目录中可以存放相同的文件。

注意:Java项目开发中,程序类必须要有包的定义才可以使用,没有包的类不存在,类的完整名称就是”包.类“。

2.自定义包
规则

  1. 在文件的最上方加上一个 package 语句指定该代码在哪个包中,也叫做包的声明.
    2.包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.badu.demo1 ).
    3.包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码.
    4.如果一个类没有 package 语句, 则该类被放到一个默认包中.
package com.example.myPackage;
//包定义的书写规则,com+公司域名+包名

操作步骤

1. 在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包
2. 在弹出的对话框中输入包名, 例如 com.hat.myPackage
3. 在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名即可
4. 此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了,同时我们也看到了, 在新创建的文件的最上方, 就出现了一个package 语句

3.如何导入包

1.Java 中已经提供了很多现成的类供我们使用. 例如Date类:可以在代码中使用 java.util.Date 导入 java.util 这个包中的 Date 类.
2.上一种方式写法比较麻烦一些, 可以使用 import语句导入包.
3.如果还需要使用相同包中的不同类的话,例如Date类所在的包中使用 java.util 中的其他类, 可以使用 import java.util.*,但这种方式有个弊端就是如果不同包中都包含了同名的类,那编译器此时就会蒙,那此时就只能用第一种方式导入不同包中的同名类。
4(不建议).使用import static导入包中静态的方法和字段。

//使用import static导入包中静态的方法和字段`import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40; 
// 静态导入的方式写起来更方便一些. 
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2)); System.out.println(result);} 
}
`

常见的包

1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
**2. java.lang.reflect:java 反射编程包; **
3. java.net:进行网络编程开发包。
4. java.sql:进行数据库开发的支持包。
5. java.util:是java提供的工具程序包。(集合类等) 非常重要
6. java.io:I/O编程开发包。

4.static成员变量

1.概念:在Java中,被static修饰的成员变量,称之为静态成员变量,也可以称为类变量,其不属于某个具体的对象,是所有对象所共享的,类中被static修饰的成员变量或方法其是被放在JVM的方法区的。

2.static修饰成员变量

static修饰的成员变量,称为静态成员变量(也称之为类变量),静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的,简单来说就是被static修饰的成员变量或者成员方法都不依赖于对象,可直接通过类名访问,静态成员变量可以在类中的普通方法或者静态方法中调用。

static修饰成员变量的特性

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但更推荐使用类名访问(即使对象的引用为NULL也可以访问静态成员变量或者静态方法,原因是静态成员的访问不依赖于对象)
3. JDK7及以前,HotSpot(Java虚拟机)中存储在方法区,JDK8及之后,类变量存储在Java堆中
4. 类变量存储在方法区当中(方法区在逻辑上是和堆区是同一级别的,但是在现实时,JVM将方法区放在堆区实现)
5. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

 public static void main(String[] args) {//dog dog1=new dog("小狗",66,"公的");//此处打印类成员并没有实例化对象System.out.println(dog.name);//说明静态成员变量不依赖于对象//给dog对象的引用变量赋null值,也可以访问静态成员dog d1=null;d1.name}
}class dog{public static String name="小鬼子";private int  age;private String sex;
}

在这里插入图片描述

5.static成员方法

1.概念:在Java中,被static修饰的成员方法,称之为静态成员方法,其不属于某个具体的对象,是所有对象所共享的。

static修饰成员方法
Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的,一般类中的数据成员都设置为private,而成员方法设置为public,

静态方法的特性

  1. 不属于某个具体的对象,是类方法
  2. 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
  3. 静态方法没有隐藏的this引用参数,因此不能在静态方法中访问任何非静态成员变量,但可以访问静态成员变量,方便理解其实就是静态方法是属于类的,调用静态方法是不依赖于对象的,而如果在静态方法中使用普通的成员变量或者普通成员方法那就会报错,因为他们都是依赖于对象来进行调用访问的,如果非要在静态方法中使用或调用普通成员变量和方法,那就要先在静态方法中实例化对象,通过创建好的对象来进行访问。

6.代码块及其分类

代码块概念:使用 {} 定义的一段代码称为代码块,根据代码块定义的位置以及关键字,又可分为以下四种:

1.普通代码块:定义在方法中的代码块.
**2.实例代码块(构造快):定义在类中的代码块(不加修饰符)。也叫:实例代码块。
3.静态块:使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量
4.同步代码块(后续讲解多线程部分再谈)

实例代码块

简介

构造代码块一般用于初始化实例成员变量,也可以在构造代码块中对静态成员变量进行赋值,值得注意的是,实例代码块只有在实例化对象时才会被执行,如果不创建对象,那实例代码块就不会被执行,每实例化一次对象就会执行一次实例代码块。实例代码块优先于构造方法执行,因为编译完成生成字节码文件后,编译器会将实例代码块中的代码拷贝到每个构造方法第一条语句前。

实例化对象前
在这里插入图片描述

实例化对象后
在这里插入图片描述

静态代码块

简介

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量,所以在静态代码块中不能对普通成员变量赋值(因为依赖于对象),且静态代码块只执行一次(因为在程序运行过程中类只在JVM中加载一次),如果类中存在多个静态代码块,那编译器会按照前后顺序与实例代码块的执行顺序不同的是,静态代码块在JVM加载类的时候,就执行了,因为静态代码块不依赖于对象

例如

class person{public String name;public int age;public static String sex;//该代码块为一个实例代码块{name="小黄";age=18;// sex="hu";System.out.println("这是person类中的实例代码块");}//改代码块是一个静态代码块1static {sex="🐖";System.out.println("这是第一个静态代码块");}//改代码块是一个静态代码块2static {sex="🐂";System.out.println("这是类中第二个静态代码块");}public person(String name, int age) {this.name = name;this.age = age;System.out.println("这是带三个参数的构造函数");}
}
public class pack1demo1 {public static void main(String[] args) {person man1=new person("man1",54);person man2=new person("man2",22);System.out.println(man1.name);System.out.println(man1.age);System.out.println(person.sex);}
}

在这里插入图片描述

静态代码块与实例代码块的执行顺序

一般静态代码块的是先于实例代码块进行执行的,因为静态代码块是在类进行加载时就开始执行的,且只执行一次,而我们的实例代码块则是在类已经加载好之后,也就是要进行实例化对象时,此时实例代码块开始执行,对对象的成员变量进行初始化,可执行多次,创建一次对象就执行一次实例代码块。

java代码运行流程
Java代码在经过编译器编译之后,如果要运行必须先要经过类加载子系统加载到JVM中才能运行。在加载阶段:在链接阶段第二步准备中会给静态成员变量开辟空间,并设置为默认值,在初始化阶段,会执行静态代码块中的代码。(了解:关于类加载过程后序JVM中会详细讲解)
在这里插入图片描述

static成员变量(类变量)初始化

1.初始化方式:
静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性,静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。

2.就地初始化

就地初始化指的是:在定义时直接给出初始值

3.静态代码块初始化

静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的,所以静态成员变量常常使用静态代码块进行初始化,详情见上

相关文章:

javaSE类和对象(下)

目录君1.封装2.访问限定符3.包的定义及使用4.static成员变量5.static成员方法6.代码块及其分类实例代码块静态代码块静态代码块与实例代码块的执行顺序static成员变量(类变量)初始化1.封装 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要…...

【数据结构】第四站:单链表力扣题(二)

目录 一、链表的回文结构 二、相交链表 三、环形链表 四、环形链表Ⅱ 五、复制带随机指针的链表 一、链表的回文结构 题目描述:链表的回文结构_牛客题霸_牛客网 对于这道题,如果没有前面的一些题的基础,是非常难做的,我们的思…...

KafKa知识汇总

前言 汇总相关知识 Kafka快速实战与基本原理详解...

【RV1126】调试GT911,1024x600 7寸 MIPI 电容触摸屏

文章目录一、驱动注册失败二、触摸屏可以触摸,但是x轴数据反了三、可以触摸了,但是Y轴数据跳变,几乎只有一半的屏幕是可以正常滑动的三、汇顶触摸屏配置文件解析四、使用新的配置文件4.1 新配置解决问题4.2 测试触摸的方法在kernel增加frame …...

C的强符号/弱符号

首先上代码和结果&#xff1a; 代码&#xff1a; #include <stdio.h> int k; int k; int main() {printf("addr of k %p\n", &k);printf("value of k %d\n", k);return 0; }结果&#xff1a; addr of k 00408074 value of k 0问题&…...

AD/DA转换(XPT2046)

AD/DA介绍AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换为模拟信号AD/DA转换打开…...

乐观锁和悲观锁 面试题

Mysql的乐观锁和悲观锁 实现方式加锁时机常见的调用方式优势不足适用场景乐观锁开发自定义更新数据的时候sql语句中进行version的判断高并发容易出现不一致的问题高并发读&#xff0c;少写悲观锁Mysql内置查询数据的开始select * for update保证一致性低并发互联网高并发场景极…...

【Autoware规控】mpc_follower模型预测控制节点

文章目录1. 技术原理2. 代码实现1. 技术原理 MPC&#xff0c;即Model Predictive Control&#xff08;模型预测控制&#xff09;&#xff0c;是一种基于动态模型的控制算法。MPC算法通过建立系统的数学模型&#xff0c;根据当前状态和一定时间内的预测&#xff0c;优化未来的控…...

成果VR虚拟3D展厅让内容更丰富饱满

随着数字技术的不断发展和普及&#xff0c;数字化展厅成为了一种重要的展示形式。线上虚拟展厅作为数字化展示的一种新形式&#xff0c;采用虚拟现实技术&#xff0c;能够克服时空限制&#xff0c;打破传统展览业的展示模式&#xff0c;为用户提供更加丰富、立体、沉浸式的展览…...

【CE进阶】lua脚本使用

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ 脚本窗口Lua ScriptLua EngineAuto assemble2️⃣ 全局变量3️⃣ 进程当前打开的进程ID系统的进程列表系统的顶部窗口列表4️⃣ 线程5️⃣ 输入设备6️⃣ 屏幕7️⃣ 剪贴板&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x…...

【vue2】近期bug收集与整理02

⭐【前言】 在使用vue2构建页面时候&#xff0c;博主遇到的问题难点以及最终的解决方案。 &#x1f973;博主&#xff1a;初映CY的前说(前端领域) &#x1f918;本文核心&#xff1a;博主遇到的问题与解决思路 ⭐数据枚举文件的使用 同后端那边发送请求的时&#xff0c;请求返…...

2. 01背包问题

文章目录QuestionIdeasCodeQuestion 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi &#xff0c;价值是 wi 。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入…...

【Docker】CAdvisor+InfluxDB+Granfana容器监控

文章目录原生命令 docker stats容器监控3剑客CIGCAdvisorInfluxDBGranfanacompose容器编排&#xff0c;一套带走新建目录新建3件套组合的 docker-compose.yml检查配置&#xff0c;有问题才有输出 docker-compose config -q启动docker-compose文件 docker-compose up -d测试浏览…...

k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结

k8s 部署nginx 实现集群统一配置&#xff0c;自动更新nginx.conf配置文件 总结 大纲 1 nginx镜像选择2 创建configmap保存nginx配置文件3 使用inotify监控配置文件变化4 Dockerfile创建5 调整镜像原地址使用阿里云6 创建deploy部署文件部署nginx7 测试使用nginx配置文件同步&…...

动态内存管理(上)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是动态内存管理噢&#xff0c;下面&#xff0c;让我们进入动态内存管理的世界吧 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 为什么存在动态内存分配 我们已…...

GPT-4发布,这类人才告急,大厂月薪10W+疯抢

ChatGPT最近彻底火出圈&#xff0c;各行各业都在争相报道&#xff0c;甚至连很多官媒都下场“跟风”。ChatGPT的瓜还没吃完&#xff0c;平地一声雷&#xff0c;GPT-4又重磅发布&#xff01; 很多小伙伴瑟瑟发抖&#xff1a;“AI会不会跟自己抢饭碗啊&#xff1f;” 关于“如何…...

MySQL数据库实现主主同步

前言 MySQL主主同步实际上是在主从同步的基础上将从数据库也提升成主数据库&#xff0c;让它们可以互相读写数据库&#xff0c;从数据库变成主数据库&#xff1b;主从相互授权连接&#xff0c;读取对方binlog日志并更新到本地数据库的过程,只要对方数据改变&#xff0c;自己就…...

JavaScript传参的6种方式

JavaScript传参的方式1. 传递基本类型参数2. 传递对象类型参数3. 使用解构赋值传递参数4. 使用展开运算符传递参数5. 使用可选参数6. 使用剩余参数JavaScript是一门非常灵活的语言&#xff0c;其参数传递方式也同样灵活。在本篇文章中&#xff0c;会详细介绍JavaScript中的参数…...

蓝桥之统计子矩阵

样例说明 满足条件的子矩阵一共有 19 , 包含: 大小为 11 的有 10 个。 大小为 12 的有 3 个。 大小为13 的有 2 个。 大小为 14 的有 1 个。 大小为 21 的有 3 个。 前缀和二维数组 前缀和暴力搜索 import java.util.*; public class Main{private static int ans0;pub…...

Java的基础面试题

一.java基础1.JDK和JRE有什么区别&#xff1f;JDK是java开发工具包&#xff0c;JRE是java运行时环境&#xff08;包括Java基础类库&#xff0c;java虚拟机&#xff09;2.和equals的区别是什么&#xff1f;比较的是两者的地址值&#xff0c;equals比较的是两者的内容是否一样3.两…...

J1939故障码诊断说明

1&#xff1a;1939整体协议说明 这里主要说明1939不同的协议&#xff0c;对应不同的网络分层 注意了&#xff0c;这里只进行文档解析说明&#xff0c;具体查看去搜素协议的关键字进行理解 2&#xff1a;DMx和FMI 说明 想知道每个代号的具体含义&#xff0c;可以去 saeJ1939…...

XCPC第十三站,贪心问题

一.区间选点 我们采取这样的策略来选点&#xff1a;step&#xff08;1&#xff09;将区间按照右端点的大小从小到大排序&#xff1b;step&#xff08;2&#xff09;从前往后依次枚举每个区间&#xff0c;如果当前区间中已经包含点&#xff0c;直接pass&#xff0c;否则选当前区…...

一文让你吃透 Vue3中的组件间通讯 【一篇通】

文章目录前情回顾前言1. 父组件 > 子组件通讯传递2. 子组件 > 父组件通讯传递3. 爷孙组件&#xff0c;后代组件通讯数据总结前情回顾 在本专栏前一章节中&#xff0c;我为大家带来了 Vue3 新特性变化上手指南 的归纳梳理&#xff0c;主要介绍了 Vue3 的 Proxy 响应式原理…...

EVE遭遇大规模DDOS攻击,玩家和官方都傻眼了

如果你恰好是一名《星战前夜》&#xff08;EVE&#xff09;的国际服玩家&#xff08;虽然这个几率很小&#xff09;&#xff0c;又恰好因为疫情一直待在家里&#xff0c;那你就真是倒霉透顶了。因为从1月底开始&#xff0c;EVE的服务器就一直受到大规模的DDOS攻击&#xff0c;而…...

【数据结构】二叉树及相关习题详解

新年新气象! 祝大家兔年 财源滚滚! 万事胜意! 文章目录前言1. 树的一些基础概念1.1 树的一些基本概念1.2 树的一些重要概念2. 二叉树的一些基本概念2.1 二叉树的结构2.2 两种特殊的二叉树3. 二叉树的性质4. 二叉树的存储5. 二叉树的基本操作5.1 构造一棵二叉树5.2 二叉树的遍历…...

锂电池充电的同时也能放电吗?

大家应该都有这样经历&#xff0c;我们的手机在充电的同时也能边使用&#xff0c;有的同学就会说了&#xff0c;这是因为手机电池在充电的同时也在放电。如果这样想我们可能就把锂电池类比了一个蓄水池&#xff0c;以为它在进水的同时也能出水&#xff0c;其实这个比喻是错误的…...

通信工程考研英语复试专有名词翻译

中文英文频分多址Frequency Division Multiple Access码分多址Code Division Multiple Access时分多址Time Division Multiple Access移动通信mobile communication人工智能artificial intelligence水声通信Middle-Range Uwa Communication正交频分复用Orthogonal frequency di…...

注意力机制(四):多头注意力

专栏&#xff1a;神经网络复现目录 注意力机制 注意力机制&#xff08;Attention Mechanism&#xff09;是一种人工智能技术&#xff0c;它可以让神经网络在处理序列数据时&#xff0c;专注于关键信息的部分&#xff0c;同时忽略不重要的部分。在自然语言处理、计算机视觉、语…...

【2023Unity游戏开发教程】零基础带你从小白到超神19——射线检测

文章目录 射线检测从某点发射一条射线从摄像机发射一条射线射线检测 游戏中的红外线,默认肉眼是看不到的,从某个初始点开始,沿着特定的方向发射一条不可见且无限长的射线,通过此射线检测是否有任何模型添加了Collider碰撞器组件。一旦检测到碰撞,停止射线继续发射。 碰撞检…...

内存泄漏和内存溢出的区别

参考答案 内存溢出(out of memory)&#xff1a;指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现 out of memory。内存泄露(memory leak)&#xff1a;指程序在申请内存后&#xff0c;无法释放已申请的内存空间&#xff0c;内存泄露堆积会导致内存被…...

湖南省城乡与住房建设厅网站/网站推广策略

原文&#xff1a;http://coolketang.com/staticPhotoshop/5a98d383d50eee266a9fe316.html 1. 本节课程将为您演示&#xff0c;如何使用[注释工具]&#xff0c;给文档添加说明信息。首先在工作区的空白处双击&#xff0c;弹出[打开]窗口。 2. 在弹出的[打开]窗口中&#xff0c;双…...

网站做的像会侵权吗/成人短期就业培训班

张小龙在年初微信公开课上曾谈到表情&#xff1a;人们的表情反映出情绪越来越强烈了&#xff0c;像「裂开」这个表情就非常受欢迎。我的想法可能比裂开更暴力。有一天我跟开发同学说&#xff0c;帮我做一个功能&#xff0c;我扔出一个炸弹&#xff0c;对方的屏幕就裂开来。当然…...

用什么软件做动漫视频网站好/线上营销模式有哪些

2019独角兽企业重金招聘Python工程师标准>>> RestTemplate可以使用loadBalanced&#xff0c;但加上了oauth2的restTemplate 就识别不到服务名称了。 这个是个蛋疼的问题。 查了一天的github&#xff0c;发现了这是一个bug。 spring-cloud-security问题 看了半天也没…...

c 做网站网站/网页模板免费下载网站

首先用恶意软件和木马强杀工具Windows清理助手(下载网址&#xff1a; )&#xff0c;在安全模式中查杀恶意软件和木马。1、如果故障依旧&#xff0c;请你用系统自带的系统还原&#xff0c;还原到你没有出现这次故障的时候修复(如果正常模式恢复失败&#xff0c;请开机按F8进入到…...

网站建设报价套餐/外链屏蔽逐步解除

【知识要点】   &#xff08;&#xff11;&#xff09;初识GridView   &#xff08;&#xff12;&#xff09;为GridView加个样式   &#xff08;&#xff13;&#xff09;让GridView自定义表头 【问题提出】   如何把客户以下面列表的形式展示出来呢&#xff1f; 【…...

免费的企业建站cms/交换友情链接的渠道有哪些

提起 JavaAgent&#xff0c;很多人都说几句&#xff0c;就像古龙武侠小说里的「孔雀翎」&#xff0c;威力很大&#xff0c;江湖上都是它的传说。但真的见识过的人并没几个。JavaAgent 虽说没这么神秘&#xff0c;但也一直给人曲高和寡的感觉&#xff0c;除了一些中间件产品、大…...