类与对象(二)

封装

封装作为面向对象三大特性(封装,继承,多态)之一,那如何实现封装性的呢?就又得拿出上面的访问修饰限定符的图
访问修饰限定符
public: 就是在任何地方都可以访问
protected: 涉及子类在介绍继承时详细介绍
default: 什么都不写时默认权限,在当前包下面访问
protect: 在当前类中可以访问。

包的概念:

包就像我们创建的文件夹一样,里面包含多种类。跟c语言的头文件差不多。

导包:

那在C语言中我们要导入头文件,自然在Java中使用Java自带的类也要导包(这种意义上导包就是要写到类),使用
关键字import导包,如下:

import java.util.Date;
public class Test { public static void main(String[] args) {Date date = new Date();// 得到一个毫秒级别的时间戳System.out.println(date.getTime());}
}

当我们需要使用该包下的其他类时Java中有一个简便写法,
import java.util.*;但是如此写就会在有些情况下出先bug,例如
util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译就会出错
*导包方法错误
所以这种导包不建议。
在这种情况下要解决就需要将包在程序写上
java.util.Date date = new java.util.Date();这不是多此一举吗。

idea中自定义包

包名采用小驼峰(首单词首字母小写,其余单词首字母大写)
1.鼠标右击文件
2.左击new
3.左击package
自定义包

常见包

  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编程开发包。

static成员

成员变量/方法被static修饰就是静态成员变量/方法,
这样的成员是所有对象共用的

静态成员变量特性

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

静态成员方法特性

  1. 不属于某个具体的对象,是类方法
  2. 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
  3. 不能在静态方法中直接访问任何非静态成员变量,要访问就必须要实例化对象来通过对象调用。例如:
class Student{private string name = "zhangsan";public static fun(){Student student = new Student();student.name = "lisi";}
}

应用场景

在这一个类中实例化任何对象时,每个对象都一样的成员变量/方法就可以用static来修饰,例如要对一个班级中的同学写成绩管理系统,那他们的班级就是一样的就可以用static修饰。

static成员变量的初始化

  1. 就地初始化:在定义时直接给出初始值public static className = "一班";
  2. 默认初始化
  3. 通过构造方法中进行赋值
  4. 通过set方法进行赋值
  5. 静态代码块初始化

代码块

代码块(用{}括起来的代码都是代码块)有很多种,在这就先介绍两种。

静态代码块

定义形式很简单,定义在类内,成员方法外,如下

static {
//代码
}

1.它一般用于初始化静态成员变量。
2.只要类加载就会调用执行,且执行一次。
3.如果有多个静态代码块且里面对同一变量进行了操作,就以最后一个为准。例如:

class Student{private string className = "一班";static{className = "二班";}
}
//这种结果就是二班
class Student{static{className = "二班";}private string className = "一班";
}
//这种结果就是一班

构造代码块

也叫非静态代码块,还叫实例代码块。定义在类内,成员方法外。

class Student{private string name;private string className = "一班";static{className = "二班";}{name = "zhangsan";}
}

特性:
1.一般用来初始化非静态成员变量
2.只要实例化对象就会调用执行。
3.如果有多个静态代码块且里面对同一变量进行了操作,就以最后一个为准。

静态代码块,构造代码块,构造方法调用顺序

先执行静态代码块且只执行一次,
在执行构造代码块,
最后执行构造方法。

对静态static的我的理解

那就是static静态的东西不依赖对象,它的调用就直接用类,
在静态中要想调用非静态的就必须要实例化对象来通过对象调用。

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

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

相关文章

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测 目录 分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现DBO-CNN-SVM蜣螂算法…

APP反抓包 - 客户端证书验证进阶(代码混淆)

1.关于混淆 在安卓开发中,对于第三方的包是可以进行混淆的,例如:OKHttp3.Http.Cert.check 被混淆后可以是a.f.c.b 形式。在安卓开发中,系统包是无法混淆的,例如:java.security.KeyStore不会被混淆。由于这种的情况的存在,再次审示我们之前的通用脚本,就会发现他是不通用…

计算机Java项目|Springboot房产销售系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

mybatis-plus(2)

上文我们介绍完mybatis-plus的常用注解,现在介绍 mp的基础的yaml配置 mybatis-plus:type-aliases-package: #该位置写 数据库对应实体类的全路径global-config:db-config:id-type: auto # 全局id类型为自增长 mp同时也是支持手写sql,而且mapper的读取地…

如何用 OceanBase做业务开发——【DBA从入门到实践】第六期

当应用一款新的数据库时,除了基础的安装部署步骤,掌握其应用开发方法才是实现数据库价值的关键。为此,我们特别安排了5月15日(周三)的《DBA 从入门到实践》第六期课程——本次课程将带大家了解OceanBase数据库的开发流…

【爬虫】爬取股票历史K线数据写入数据库(三)

前几天有写过两篇: 【爬虫】爬取A股数据写入数据库(二) 【爬虫】爬取A股数据写入数据库(一) 现在继续完善,分析及爬取股票的历史K线数据通过ORM形式批量写入数据库。 2024/05,本文主要内容如下…

JavaScript数字(Number)个数学(Math)对象

目录 前言: Number(数字)对象 前言: nfinity(正负无穷大): NaN(非数字): Number的属性 Number的方法 构造函数 静态方法 实例方法 Math(数学)对象…

【数据结构】详解队列

现在我们来掌握一下队列!如果有对往期知识有不足地方,可翻阅之前文章哦! 个人主页:小八哥向前冲~-CSDN博客 所属专栏:数据结构【c语言版】_小八哥向前冲~的博客-CSDN博客 栈和队列的实现其实都是对你顺序表和链表的检验…

Dev-C++的下载和安装教程(超详细图文,小白入门)

Dev-C(或者叫做Dev-Cpp)是Windows环境下的一个轻量级C/C集成开发环境(IDE)。它是一款自由软件,遵守GPL许可协议分发源代码。 Dev-C集合了功能强大的源码编辑器、MingW64/TDM-GCC编译器、GDB调试器和AStyle格式整理器等…

4.uniapp+vue3项目使用vuex

文章目录 1. uniappvue3项目使用vuex1.1. main.js引入store1.2. 创建store/index.js1.3. 项目中引用1.4. 开始解决实际问题1.5. vuex和storage的区别 1. uniappvue3项目使用vuex 这篇文章,既是使用的教程,也是用来解决一个实际问题:uView自定…

GO语言核心30讲 实战与应用 (WaitGroup和Once,context,Pool,Map,字符编码,string包,bytes包)

原站地址:Go语言核心36讲_Golang_Go语言-极客时间 一、sync.WaitGroup和sync.Once 1. sync.WaitGroup 比通道更加适合实现一对多的 goroutine 协作流程。 2. WaitGroup类型有三个指针方法:Wait、Add和Done,以及内部有一个计数器。 (1) Wa…

代码随想录训练营Day 27|理论基础、力扣 77. 组合

1.理论基础 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法(理论篇)| 回溯法精讲!_哔哩哔哩_bilibili 来自代码随想录的网站: void backtracking(参数) {if (终止条件) {存放结果;return;}for (…

基于springboot+vue+Mysql的音乐翻唱与分享平台

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

☀☀☀☀☀☀☀有关栈和队列应用的oj题讲解☼☼☼☼☼☼☼

准备好了么 目录: 一用两个队列实现栈: 1思路: 2画图理解: 3代码解答: 二用两个栈实现队列: 1思路: 2画图理解: 3代码解答: 三设计循环队列: 1思路…

synchronized 使用及实现原理

synchronized 关键字 如何使用 synchronized 关键字的使用方式主要有下面 3 种: 修饰实例方法 修饰静态方法 修饰代码块 1、修饰实例方法 (锁当前对象实例) 给当前对象实例加锁,进入同步代码前要获得 当前对象实例的锁 。 …

Vitis HLS 学习笔记--AXI_STREAM_TO_MASTER

目录 1. 简介 2. 示例 2.1 示例功能介绍 2.2 示例代码 2.3 顶层函数解释 2.4 综合报告&#xff08;HW Interfaces&#xff09; 2.5 关于TKEEP和TSTRB 2.6 综合报告&#xff08;SW I/O Information&#xff09; 3. 总结 1. 简介 本文通过“<Examples>/Interface…

pytest(二)

1.pytest-html⽣成报告 Pytest-HTML 是⼀个插件&#xff0c;它可以⽣成漂亮且易于阅读的 HTML 测试报告。下⾯是使⽤ pytest-html ⽣成报告的步骤&#xff1a; 1. 安装 pytest-html 插件&#xff1a; pip install pytest-html 2. 运⾏测试并⽣成报告 pytest --htmlr…

5月13号作业

使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式&#xff1a; 当键盘按ctrlc的时候&#xff0c;切换消息读取方式&#xff0c;一般情况为读取指定编号的消息&#xff0c;按ctrlc之后&#xff0c;指定的编号不读取&#xff0c;读取其他所有编号的消息…

CCF-Csp算法能力认证,202209-1如此编码(C++)含解析

前言 推荐书目&#xff0c;在这里推荐那一本《算法笔记》&#xff08;胡明&#xff09;&#xff0c;需要PDF的话&#xff0c;链接如下 「链接&#xff1a;https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码&#xff1a;6vdq”复制这段内容后打开手机迅雷…

python内置函数exec()和eval()区别

在Python中&#xff0c;eval() 和 exec() 都是内置函数&#xff0c;用于执行存储在字符串或对象中的Python代码&#xff0c;但它们之间也有一些区别。 eval() 语法&#xff1a;eval(expression, globalsNone, localsNone) expression&#xff1a;需要求值的字符串表达式。可…