我们加上this之后再进行测试:
加上this之后输出结果如下,显然通过访问器可以对其进行修改了!
this的身影
初识类与对象,对这些抽象的概念我们都很疑惑,那么在哪儿能找到this呢?
万事不决Debug!
我们在debug中可以找到this的身影,别说,this这小东西还挺别致,挺能藏,我之前学习还没发现debug中能找到,多亏了老陈,对暗号:老陈YYDS!
this关键字作用(2)
我们可以使用this()调用构造方法
其中括号内可以与其他构造方法的参数列来调用其他构造方法,但是传进去的必须是实参:
如此处通过this(20211128);可以调用,而不能 this(int date);
package com.zdx.csdn.blog.test;
public class test1_20211128 {
public static void main(String[] args) {
new TestConstructor();
}
}
class TestConstructor{
int date;
TestConstructor(int date){
System.out.println(“参数列表不为空的构造方法”+date);
}
TestConstructor(){
this(20211128);
System.out.println(“空构造方法”);
};
}
package com.zdx.csdn.blog.test;
public class test1_20211128 {
public static void main(String[] args) {
new TestConstructor(20211128);
}
}
class TestConstructor{
int date;
TestConstructor(int date){
this();
System.out.println(“参数列表不为空的构造方法”+date);
}
TestConstructor(){
System.out.println(“空构造方法”);
};
}
通过对比:我们发现this的第二个作用,引用其他的构造方法的特点
一言以蔽之:在构造方法中使用this可以调用不同于当前构造方法的参数列的其他任意方法(但是受限于this语句必须写在构造方法第一行,只能调用一次;
不能调用参数列表相同的,是因为会形成递归。
2:从类的内容层面了解类
============
我们知道类包括五种
=============
属性
方法
内部类
代码块(官名构造代码块!)
构造方法(严格意义上来说也可叫构造器!)
万物皆对象:
在逻辑层 >>>我们面向存在于开发人员脑海中的世界 >>对现实中的一类有形或无形的概念的特征抽取,
特征表现为属性,对其行为的抽取,表现为方法。
换言之,属性即是数据,方法即是针对数据的操作。
内部类我们暂时还不需要了解那么深;
随着后续的学习,当深入到继承时,还有父子类优先关系需要比较
类加载的优先级规则:
==========
存在继承关系的不同类中,同一部分父类优先子类
同一父(子)类中static系列 优先于 不含 static 的一系列
同类型内(同是static,同非static)即:
1:默认值最先**(即赋值为类0:数字赋0,布尔赋false,字符串赋""这种)最先**
2:定义时初始化和代码块同等级,在代码中谁的位置在前,谁先执行
3:然后是构造器(构造函数)
package com.zdx.csdn.blog.test;
public class TestStaticVar {
static int staticint = si();
int one = un_si();
public static int si(){
System.out.println(“静态变量被初始化”);
return 1;
}
public int un_si(){
System.out.println(“成员变量one被初始化”);
return 2;
}
public static void main(String[] args) {
new TestStaticVar();
new TestStaticVar();
}
}
静态对象(变量)优先于非静态变量(对象)初始化,其中,静态变量(对象只初始化一次)
非静态对象(变量)可能会初始化多次。
3:对象
====
3.1:面向对象三个层次:
1)概念层(现实生活中) 万物皆对象 风,过程(学习过程,入学时间,学习内容,操作系统中的进程)也是对象
2)逻辑层 >>>存在于开发人员脑海中的世界 >>对现实中的一类有形或无形的概念的特征抽取,
特征表现为属性,对其行为的抽取,表现为方法。
换言之,属性即是数据,方法即是针对数据的操作。
3)物理层 >> 对象在堆区,对象在堆上是怎么存的?
3.2:对象的声明,其物理层面的操作及其存储:
Person person = new Person();
对象的引用变量:在栈上 即等号左边的stu存储在栈上
Java中每次 new 的 出现即在内存(heap堆区域)要内存,由JVM分配空间。
此处就要提到JAVA的安全机制做的格外不错
等号右边的对象存储在堆上,我们根本拿不到地址
等号左边的存储在栈上,我们能拿到如下图的地址,但是经过哈希处理的!
把这段内存区域,全部用0(或者null,或者false这种类似0的不同类型的初始值)去进行初始化,大略估计内存后对其进行分配。//这也就解释了为什么类内的成员变量需要初始化。
但是我们在堆上申请的内存是给对象用的!
//静态变量属于是初始化就焊死在JVM的方法区了。
本处所说的主要是指 Java 中 每次 有 new 出现 必有对象生成。
static变量 和 static方法 加上static 就和 对象无关了。static属于是跟着类走的,和类是一家人,类的预加载和 对象的初始化时两个阶段!
3.2:浅谈对象的消亡:
上文讲述了对象的诞生与操作。,对象的消亡指的是:
没有任何的引用指向它,他就死亡了,被称为垃圾
JVM中很重要的机制叫做垃圾回收,也就是JVM管杀管埋
Java舍弃了指针、舍弃了内存管理。说白了Java就是不信任所有的程序员都一定能够理性、安全和高效率的去处理这类复杂问题,
所以就在语言设计上用弱化复杂度(或者说灵活性、丰富度)去换取安全性罢了 。
每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都有自己的生命周期,当一个对象的生命周期结束时,对象就变成垃圾,由java虚拟机(JVM)自带的垃圾回收机制处理。不能再进行使用。
在学习垃圾回收机制之前,首先需要了解何种对象会被Java虚拟机视为垃圾:
-
🔲对象引用超过其作用范围,这个对象将被视为垃圾;
-
🔲将对象赋值为null
——————————补充内容————————————
==========================
4:初识JVM
=======
4.1:JVM是什么
JVM是Java Virtual Machine的缩写。它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机。
JVM屏蔽了具体操作系统平台的信息(显然,就像是我们在电脑上开了个虚拟机一样),当然,JVM执行字节码时实际上还是要解释成具体操作平台的机器指令的。
通过JVM,Java实现了平台无关性,Java语言在不同平台运行时不需要重新编译,只需要在该平台上部署JVM就可以了。因而能实现一次编译多处运行。(就像是你的虚拟机也可以在任何安了VMWare的系统上运行)
4.2:JVM的内容:
JVM主要包括:程序计数器(Program Counter),Java堆(Heap),Java虚拟机栈(Stack),本地方法栈(Native Stack),方法区(Method Area)
4.2.1:方法区:method
又叫静态区,存放所有的
①类(class),
②静态变量(static变量),
③静态方法,
④常量
⑤成员方法(就是普通方法,由访问修饰符,返回值类型,类名和方法体组成)。
4.2.2:堆:
jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 。
4.2.3:栈:
Java栈的区域很小,只有1M,特点是存取速度很快,所以在stack中存放的都是快速执行的任务,每个方法执行时都会创建一个栈帧(Stack Frame),描述的是java方法执行的内存模型,用于存储局部变量,操作数栈,方法出口,基本数据类型的数据,和对象的引用(reference)等。每个方法的调用都对应的出栈和入栈。
4.2.4:程序计数器(ProgramCounter)寄存器:
PC寄存器( PC register ):每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。
4.2.5:运行时常量池:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
[外链图片转存中…(img-2MHhPy9K-1711805840984)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-N71tZUQf-1711805840984)]
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
[外链图片转存中…(img-f1SCZxd3-1711805840985)]