【Java】面向对象之类和对象,中科创达java面试题

我们加上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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

下面有部分截图希望能对大家有所帮助。

在这里插入图片描述

[外链图片转存中…(img-2MHhPy9K-1711805840984)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-N71tZUQf-1711805840984)]

总结

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

下面有部分截图希望能对大家有所帮助。

[外链图片转存中…(img-f1SCZxd3-1711805840985)]

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值