上一篇文章和大家分享在面向对象方面的一些常见面试题,但是比较多就只分享了在构造方法和静态实例方面的题目,今天就继续来和大家总结剩下的面试题。
针对上面的问题,想必大家脑海中首先浮现出的答案是构造器,没错,构造器是Java中常用的对象初始化方式。
在Java中,有两种初始化块:静态初始化块和非静态初始化块。它们都是定义在类中,用大括号{}括起来,静态代码块在大括号外还要加上static关键字。
Java与C++的一个不同之处在于,Java不仅有构造函数,还有一个“初始化块”(Initialization Block)的概念。Java中的初始化块在创建Java对象时隐式执行,并且是在构造函数之前执行。
静态变量之所以又称为类变量,是因为静态变量和类关联在一起,随着类的加载而存在于方法区(而不是堆中)
Java代码初始化块是一种在类加载时自动执行的代码块,它用于初始化类的成员变量或执行一些只需要进行一次的初始化操作。初始化块有两种类型:静态初始化块和实例初始化块。
在面向对象的编程语言中,有三个特性,分别为:封装、继承和多态。实现多态的前提是继承,多态的作用是消除类型之间的耦合关系。对于多态,我们常说的词有两个,分别为:向上转型和向下转型。
构造方法是创建 Java 对象的重要途径,通过 new 关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四个步骤:
显然执行的只有创建的User3执行了有参构造,User2和User1执行的都是无参构造,他们并没有自动调用父类的有参构造。
我这里捞出一道code题要各位大佬来把玩把玩,如果你一眼就看出了端倪,那么恭喜你,你可以下山了:
当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型的每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。 访问任何静态成员或创建该类型的实例时,将触发静态初始化。 但是,如果声明一个类型的变量,但不使用它,则不会触发静态初始化;这在初始化会更改全局状态的情况下非常重要。
学习资料链接:https://www.bilibili.com/video/av30023103/
前面几篇文章用Java带大家一起了解了几个游戏小项目,感兴趣的小伙伴可以点击文章观摩下,手把手教你用Java打造一款简单故事书(上篇)、手把手教你用Java打造一款简单故事书(下篇)、手把手教你用Java打造一款简单考试系统(上篇)、手把手教你用Java打造一款简单考试系统(下篇)、手把手带你用Java打造一款对对碰游戏(上篇)、手把手带你用Java打造一款对对碰游戏(下篇)、手把手带你用Java实现点灯游戏(上篇)、手把手带你用Java实现点灯游戏(下篇),接下来的几篇文章是关于Java基础的,希望对大家的学习有帮助,欢迎大家在讨论区留言。
修饰符怎么使用也是Java基础中比较重要的知识点,彻底理解了之后,后面学习更高深的东西才能得心应手。今天,以修饰符中比较常见的final为切入点,来谈谈final的使用的奇淫技巧以及一些相关的知识点。学废了记得三连哦。
在 Java 中,clinit 是一个特殊的编译器生成的方法名,它代表类的静态初始化。这个方法是由编译器自动收集类中的所有静态变量的赋值动作和静态代码块中的语句合并产生的。当一个 Java 类第一次被主动使用时,Java 虚拟机会处理收集到的 clinit()方法,执行这些类的静态初始化。
如果你用过 Java ,那你一定对静态初始化代码块不会感到陌生, JavaScript 预计会在 v8 9.1 版本支持这个特性。
关于构造函数,以下几点要注意: 1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。 2.构造函数的作用是用于给对象进行初始化。 3.一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次。
Java类加载过程 两条准则: 一个对象要初始化,如果它有父类,则会先初始化父类。(父类优先于子类) 在第一次创建对象时会先初始化静态块。(静态优先于非静态) 一个例子: 从下面的代码中可以总结出来Java对象的初始化过程: 父类静态初始化块(包括静态代码块和静态字段,这两个地位等价,按书写顺序执行) 子类静态初始化块 父类非静态初始化块 父类构造器 子类非静态初始化块 子类构造器 class A{ static { System.out.println("static A"); } { Sy
有关Java虚拟机类加载机制相关的文章一搜一大把,笔者这里也不必再赘述一遍了。笔者这里捞出一道code题要各位大佬来把玩把玩,如果你一眼就看出了端倪,那么恭喜你,你可以下山了:
以上两种方法均可实现数组静态初始化,其中花括号包含数组元素值,元素值之间用逗号,隔开。这里要注意的是,只有在定义数组的同时进行数组初始化,才能支持使用简化的静态初始化。为简单起见,建议采用第二种方法。
type[] arrayName; 或 type arrayName[];
可以用构造器来进行初始化,在运行时刻,可以调用方法或执行某些动作来确定初值,但要牢记:无法阻止自动初始化的进行,它将在构造器被调用之前发生。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147249.html原文链接:https://javaforall.cn
推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不是type类型。建议不要使用第二种方式
聊聊JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别。
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。
父类--静态变量 子类--静态变量 父类--变量 父类--构造器 子类--变量 子类--构造器
static方法: 1、定义: 《java编程思想》中提到:static方法就是没有this的方法,在static方法内部不能调用非静态方法,反过来是可以的,而且可以在没有创建任何对象的情况下,仅仅通过类本身来调用static方法,这实际上正是static方法的用途 2:概念: static方法一般称作静态方法,由于静态方法不依赖于对象就可以访问,所以也就没有this,并且static修饰的方法不能调用非静态成员变量和非静态成员方法,但是非静态成员方法可以调用静态成员方法 static变量: 定义:
JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的java类型的过程。
在开发时我们习惯在创将某个实例之前先把静态成员变量初始化好,具体做法是通过静态初始化语句以及静态构造函数。静态构造函数在 c# 是比较特殊的函数,它会在第一次访问所在类定义的其他方法、变量和属性之前执行,一般我们用它来初始化静态变量、实现单例模式以及执行其他一些需要在访问其他必要的工作。如果静态字段初始化工作较为复杂或者是初始化开销很大的话,那么我们可以使用 Lazy 机制将初始化工作推迟在第一次访问该字段的时候再去执行。 在 C# 中比较常见的静态初始化语句是实现单例模式,开发人员可以将实例级别的构造函数设为 private ,并添加静态初始化语句并在其中调用这私有的实力构造函数。我们来看一个例子,具体来看看怎么实现单例模式:
数组属于引用数据类型,在使用前必须初始化,否则会报NullPointerException(空指针异常:运行时异常) 一维数组初始化: 动态初始化:(声明并开辟数组) 数据类型[ ] 数组名称=new 数据类型[长度]
static方法: 1、定义: 《java编程思想》中提到:static方法就是没有this的方法,在static方法内部不能调用非静态方法,反过来是可以的,而且可以在没有创建任何对象的情况下,仅仅通过类本身来调用static方法,这实际上正是static方法的用途 2:概念: static方法一般称作静态方法,由于静态方法不依赖于对象就可以访问,所以也就没有this,并且static修饰的方法不能调用非静态成员变量和非静态成员方法,但是非静态成员方法可以调用静态成员方法 static变量: 定
解析说构造器、静态初始化块、实例初始化块不算类的成员,所以不会被继承, 这个时候就有问题了:按照常理来说,构造器、静态初始化块、实例初始化块也是构成类的部分之一,为什么就不算类的成员呢? 通过查阅搜索引擎后发现:
Java数组的静态初始化实现 概念 1、是指执行静态初始化块里面的内容。在创建数组时,直接将元素确定。 2、格式 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}; 实例 package com.itheima.array2; public class Demo1Array { /* 数组静态初始化 : 初始化时指定每个数组元素的初始值,由系统决定数组长度 完整格式: 数据类型[] 数组名
以编译时错误的方式呈现。编译器可以为 i 赋一个默认值,但是未初始化的局部变量更可能是程序员的疏忽,所以强制程序员提供一个初始值,往往能帮助找出程序里的 bug。
分为两种,一种是本类的初始化,一种是含有父类的初始化顺序。这里分开来说, 本类的初始化顺序是:静态变量、静态初始化块、变量、初始化块、构造函数 继承类的初始化顺序是:父类静态变量、父类静态初始化
构造方法是创建Java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回该类的对象,但这个对象并不是完全由构造器负责创建。创建一个对象分为如下四步:
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,使用单例模式的类只有一个对象实例。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141204.html原文链接:https://javaforall.cn
第二天的课程明显就比第一天的要难了,? 表示很吃力,脑子不够用的节奏。 各种概念绕来绕去,脑袋都要绕成了壳。 不过还好没有放弃,想个办法画出各概念间的联系,虽然没全记住,但是还算是看懂文字了。
Java 数组是一种数据结构,它由一组相同数据类型的元素组成,按照一定的顺序排列。Java 数组可以存储基本类型(如 int、float、double 等)和对象类型(如 String、自定义类等)。
数组指的是一组相关变量的集合。Java中,数组属于引用数据类型,所以必然牵扯到内存的关系。对于数组的定义格式包括:
现在假设有五名同学的体育期末成绩,要将其存储起来你会怎么存?在你不了解数组的时候,你的代码可能是这样写的:
2019年7月16日 “ 我走得很慢,但是我从来不会后退。 ----亚伯拉罕.林肯 ” 01 数组 (1)什么是数组【理解】 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。 (2)数组定义格式【记忆】 1) 第一种 数据类型[] 数组名; 2) 第二种 数据类型 数组名[]; (3)数组动态初始化【应用】 1) 什么是动态初始化 数组动态初始化就是只给定数组的长度,由系统给出默认初始化值。 2) 动态初始化格式 数据类型[] 数组名 = new 数据类型[数组长度]; 3) 动态初始
数组介绍 数组的声明 数组初始化 数组元素默认值 数组复制 数组反转 数组查找:线性查找、二分查找 数组排序:冒泡排序 数组介绍 数组名: 创建数组内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。 下标(或索引):从0开始 数组是引用数据类型, 元素相当于类的成员变量, 数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化 数组中的元素可以是基本数据类型也可以是引用数据类型 数组的声明 声明:String[] names; int scores[]; 数组初始化:静态初
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
写这篇博客的原因是因为从大一学习c语言开始 就对二维数组的声明 和初始化 一直没有搞懂。。。。直到学到了Java依旧搞得不是很清楚。
领取专属 10元无门槛券
手把手带您无忧上云