java知识回顾笔记(对象、反射、内省、实例、父类、构造方法、封装、泛型、super())

news2024/10/3 2:17:21

类&对象

在创建了一个类时,只声明但不赋值,其默认值为:
在这里插入图片描述
理解下图含义,即可理解对象和类:

在这里插入图片描述

实例

对象又被称为实例,实例变量被创建时,系统默认会赋值,例如:

Student student = new Student()
# student.name此时就有默认值

堆和栈

对象是存在堆内存中的,方法所需要的内存会在栈中分配,例如main()方法。
1.堆内存中存储对象以及实例变量
2.局部变量存放在栈里面
3.当new 一个对象时,例如Student s1=new Student()时(s1为局部变量),s1此时存储的为对象的堆地址,像s1这种存储了地址的变量有一个特殊的名字:引用
在这里插入图片描述
在这里插入图片描述

java执行堆栈画图【老杜版】

局部变量&成员变量

方法体外(class里)的变量叫成员变量、方法体内声明的变量叫局部变量
局部变量存放在栈内存中,成员变量也叫实例变量存放在堆内存
在这里插入图片描述

构造方法

构造方法又被称为:构造器、Constructor、构造函数
构造方法有两个作用:1.创建对象 2.给对象赋值

当new一个对象时,会自动运行一个无参数的构造方法,当用户没有自定义一个构造方法时,系统默认提供了一个无参数的构造方法

public class test {
    public static void main(String[] args){
        Student student = new Student();
}
}

Student.java

public class Student {
	String name;
    public Student(){
        System.out.println("execute!!!");
    }
}

知识回顾

封装

封装就是将public私有化

封装的主要作用:
1.保证内部结构安全
2.屏蔽复杂、暴露简单

方法名解析static

在方法体中声明的变量叫做局部变量
在方法体外声明的变量叫做成员变量
成员变量又分为:实例变量、静态变量,例如:

class VarTest{
//成员变量中的实例变量,可以new对象,所以会造成空指针异常
int i;
//成员变量中的静态变量,静态的,不会需要new对象,不会造成空指针异常
static int k;
}

静态方法:

public static void m1(){
}

那么我们什么时候使用static,什么时候不使用呢?根据上面提到的,成员变量中不使用static就是实例变量:

Class Chinese{
//身份证应该是实例变量,因为一个身份证对应一个对象
String idCard;
//国籍,国籍是一个类别人的特性,并不属与一个人的特性
//String Contry;
Static String Contry;
}

如果使用非static修饰,contry每次都会在内存中开拓一片空间,导致内存浪费
在这里插入图片描述
如果使用static修饰,contry会存放在方法区中,不会被新建到对象中
在这里插入图片描述
我们可以通过Chinese.Contry来实现调用Contry,但是不能直接调用Chinese.idCard。因为Contry是被static修饰的静态变量,被static修饰的内容都可以采用类名.进行访问

Class Chinese{
//身份证应该是实例变量,因为一个身份证对应一个对象
String idCard;
//国籍,国籍是一个类别人的特性,并不属与一个人的特性
//String Contry;
Static String Contry = "中国";
}

static: 都是修饰类相关的,所有static修饰的都可以采用类名.进行访问

反射

反射包:java.lang.refiect.*

java.lang核心包
java.util工具包
java.io io流包

反射的标志:

Class c1 = Class.forName("java.lang.String")  //c1代表了String.class文件,或者说代表了String类型

反射可以操作class文件,反射机制相关重要的类有:

java.lang.Class:代表整个字节码,代表一个类型
java.lang.reflect.Method:代表字节码中的方法字节码。代表类中的方法。
java.lang.reflect.Constructor:代表字节码中的构造方法字节码
java.lang.reflect.Field:代表字节码中的属性字节码
要先调用了Class,才能获得Method、Constructor、Field等

要操作一个类的字节码,需要首先获取到这个类的字节码,怎么获取到java.lang.Class实例?:

第一种:Class c = Class.forName(“完整类名带包名”);
第二种:Class c = 对象.getClass();
第三种:Class z =String.class; Class k =Data.class;

代码分析:
以下就是通过反射配合newInstance创建对象,c此时代表User.class这个文件或者说代表了这个类型

Class. c = Class.forName("com.test.java.bean.User");
Object obj = c.newInstance();

通过反射给属性值赋值

Class c = Class.forName("com.java.test.Student"); 
Object obj = c.newInstance();
Field noFiled = c.getDeclaredField("password") //Student类中有一个String password;
noFiled.set(obj,2222)//给password设置值为2222
noFiled.get(obj)//读取password的值

//私有变量可以通过以下代码进行打破封装进行访问
noFiled.setAccessible(true)

在这里插入图片描述

泛型

在下面这种情况时,it.next()该用哪种类型去接收?
在这里插入图片描述
使用泛型指定list中只能存储Animal类型的数据

list<Animal> myList = new ArrayList<Animal>();

因为Cat和Bird都是继承Animal的,所以这时候能够:

Cat c = new Cat();
Bird b = new Bird();
myList.add(c);
myList.add(b);

Iterator<Animal> it =myList.iterator();
while(it.hasNext()){
	Animal a = it.next();
	}

super()

当一个构造方法,存在super(),代表调用父类的无参构造方法,当存在super(123)表示调用父类有参数的构造方法:

class B extends A{
	super();
	super(123);
	public B(){
		System.out.println("B类无参构造方法!")
	}
}

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

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

相关文章

什么知识库工具适合小团队?看看文档管理系统+NAS的最新解决方案

编者按&#xff1a;还在为团队选那款网盘而发愁吗?试试文档管理系统和NAS结合吧&#xff0c;高效率低成本&#xff0c;适合小团队。 关键词&#xff1a;免维护&#xff0c;免安装&#xff0c;大容量&#xff0c;在线编辑&#xff0c;文档共享&#xff0c;数据安全 对于企业或…

LeetCode-66-加一

1、从后向前遍历 我们可以从后向前遍历数组&#xff0c;针对不同的情况进行操作&#xff1a;1、若当前数字不为9&#xff0c;则我们直接将数字的值加一并返回即可&#xff1b;2、若当前数字为9&#xff0c;我们将当前数字置为0并对前一位执行加一操作&#xff1b;3、若所有数字…

后端接口时通时不通,团队全链路排查实战

背景&#xff1a; 1 最近团队做了一套系统&#xff0c;已经临近上线了&#xff1b; 2 后端的服务和前端的代码都是新写的&#xff0c;两边的服务器&#xff0c;数据库也都是新申请的&#xff1b; 3 本来测试的时候用的测试服务器&#xff0c;一切都挺好的&#xff0c;但部署到线…

基于分发与计算的GRTN全球实时传输网络

一张能同时满足「分发」与「计算」需求的网。 从直播趋势看「分发」与「计算」 阿里云直播产品架构图中&#xff0c;主要分为端和云两个部分&#xff1a;在端侧&#xff0c;主要包含推流端和播放端&#xff1b;在云侧&#xff0c;一是基于分布式节点构建的传输网&#xff0c;二…

mosquitto部署mqtt broker 并测试订阅与发布

mosquitto部署mqtt broker 并测试订阅与发布 1&#xff0c;MQTT协议介绍 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型…

如何使用phpstudy在服务器上发布Discuz_X3.4_SC_UTF8_20220811和zzcms2023

Web-ZZCMS&#xff1a; 源码下载&#xff1a;http://www.zzcms.net/about/6.html Web-Discuz&#xff1a; 源码下载&#xff1a;https://www.discuz.net/ 首先安装phpstudy&#xff0c;傻瓜式安装教程&#xff0c;如果中途 遇到报错比如我遇到的是Apache未启动&#xff0c;80端…

Ansible自动化部署安装openGauss3.1企业版单机

文章目录一、背景二、环境准备三、具体实施步骤3.1、安装ansible3.2、配置主机清单3.3、测试主机连通性3.4、创建相关目录3.5、下载openGauss软件包到files目录3.6、创建变量文件3.7、创建安装时需要的xml模板3.8、创建任务文件四、执行自动化安装4.1、校验语法4.2、自动化安装…

CAD新手必练图形三

这次说的这个CAD新手必练图形&#xff0c;用到了CAD直线、圆、多边形、修剪和旋转等多个CAD功能命令&#xff0c;一起跟着操作一下吧 目标图形 操作步骤 1.使用CAD直线命令绘制一条垂直的直线和两条水平的直线&#xff0c;两条水平的直线之间的距离为15&#xff0c;并将他们修…

【CSDN竞赛第11期】编程竞赛总结

文章目录前言/背景题目与解题代码1. 圆小艺2. K皇把妹3. 筛选宝物4. 圆桌CSDN编程竞赛报名地址&#xff1a;https://edu.csdn.net/contest/detail/16 前言/背景 目前已经连续参加10次CSDN的编程竞赛了&#xff0c;这种比赛挺有意义&#xff0c;希望一直举办下去&#xff01; 题…

JDBC 访问数据库

文章目录一、实验目的二、实验要求三、实验内容1、设计数据库表2、定义实体类3、定义数据库连接类4、实现数据库的增删改查5、测试用例一、实验目的 理解 JDBC 的工作原理&#xff0c;掌握 JDBC 访问数据库&#xff1b; 掌握常见数据库 MYSQL &#xff1b; 二、实验要求 理解…

【华为上机真题 2022】字符串序列判定

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

中断系统中的设备树__中断号的演变与irq_domain

1 中断号与硬件相关_号码固定 当我们的系统中只有一两个中断控制器时&#xff0c;上面的方法很有用&#xff0c;可以给每一个中断预先确定好他的虚拟中断号&#xff0c;但是当中断控制器越来越多、当中断越来越多&#xff0c;上述方法(virq和hwirq固定绑定)有缺陷: a. 增加工作…

马克思的手稿-第11届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第92讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…

23软考备考已开始,网络工程师知识点速记~(2)

新一轮软考备考来啦~ 为了帮助大家提高备考效率&#xff0c;将2023上半年软考网络工程师知识点速记分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01; 指令系统 指令系统是中央处理器所有指令的集合&#xff0c;通常一条指令可分解为操作码和地址码两部分&#xff…

python 从一道作业题到制作一个图形界面的“诈金花”游戏

题目很简单&#xff1a;就是自己写一个程序&#xff0c;实现诈金花游戏的发牌、判断输赢。 规则&#xff1a; 一付扑克牌&#xff0c;去掉大小王&#xff0c;每个玩家发3张牌&#xff0c;最后比大小&#xff0c;看谁赢。 牌型&#xff1a; 豹子&#xff1a;三张一样的牌&am…

Fluent案例:肾动脉RDN治疗过程的仿真

1 问题背景 肾动脉消融&#xff08;Renal denervation&#xff0c;简称RDN&#xff09;是一种治疗高血压的办法&#xff0c;其基本原理为利用插入肾动脉的电极消融导管进行射频消融&#xff0c;使肾动脉血管壁附近的交感神经因高温而损伤失活&#xff0c;减少神经系统过度活跃的…

想转行做IC,却找不到适合自己的岗位?

想跨行从事IC行业&#xff0c;但是没有一个比较好的学历&#xff0c;也没有一个很好的专业&#xff0c;或者受限于各种各样的外在条件&#xff0c;那么在这个行业里面&#xff0c;到底有没有个岗位能够适合自己上手呢&#xff1f; 当然有&#xff0c;不是所有芯片岗位都要高学…

什么是自监督,自监督和有监督的区别什么是SSL

有监督 就是让机器做题目&#xff0c;给他标准答案 那无监督 可以自己推出来的吧 就是没有给标准答案 也就是label 或者在目标检测里面说是groundTruth 什么是Ground-truth&#xff0c;Ground-truth什么意思_&#xff1a;&#xff09;&#xfffd;东东要拼命的博客-CSDN博客_…

基于日特征气象因素的支持向量机预测电力负荷(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

tkinter绘制组件(37)——普通图片

tkinter绘制组件&#xff08;37&#xff09;——普通图片引言布局函数结构添加图片图片缩放完整函数代码效果测试代码最终效果github项目pip下载结语引言 其实&#xff0c;本来不打算专门为TinUI写图片元素控件的&#xff0c;让编写者自行使用PhotoImage类和画布自带的create_…