当前位置:网站首页 > Java基础 > 正文

java语言基础图片



Java基础常见面试题

1. Java语言的特点

 

2. Java和C++的区别

 

3. JVM和JRE、JDK之间的关系

 

java语言基础图片语雀java面试题 java语言面试_语雀java面试题

4. 什么是Java语言的跨平台,原理是什么?

 

5. 什么是字节码?采用字节码的好处

 

6. Java的基础语法

6.1 java中注释有哪几种形式?

 

6.2 标识符和关键字

 

Java语言中关键字有哪些?

 
 

6.2.1 final关键字有什么用?

final可以用来修饰类、属性和方法:

  • 被修饰的类不可以被继承。
  • 被修饰的方法不可以被重写。
  • 被修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的。

6.2.2 final、finally、finalize的区别

  • 可以修饰类、变量、方法、修饰类表示该类不能被继承,修饰方法表示该方法不能被重写,修饰变量表示该变量是一个常量不能被重新赋值。
  • 一般作用在try-catch代码块中,在处理异常的时候,我们将一定要执行的代码放到finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
  • 是一个方法,属于Object类的一个方法,而Object是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可以回收的最后判断。

6.2.3 this关键字的用法

this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以分为3种:

  • 普通的直接引用,this相当于指向当前对象本身。
  • 形参与成员变量名字重名时,可以用this来区分:

 
 

  • 引用本类的构造器;this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

 
 

6.2.4 super关键字的用法

可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。


也有三种用法:

  • 普通的直接引用,与this类似,super相当于是指向当前对象的父类的引用,这样就可以用super.xxx来引用父类的成员。
  • 子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分。如下面代码所示

 
 

  • 引用父类构造器,super(参数):调用父类中的某一个构造器(应该为构造器中的第一条语句)。

6.2.5 this与super的区别

  • this指的是当前对象,而super指的是当前对象的直接父类。
  • 调用构造器的区别:this调用本类构造,务必放在构造方法的第一行。super调用父类构造,务必放在子类构造方法首行。
  • 访问成员变量和方法的区别:this会先去访问本类中是否有此属性或方法,本类没有再去父类中查找,而super是直接访问父类中的属性和方法。

注意点:

1、

this和super不能同时出现在一个构造函数里面。

因为this(){};这是调用本类无参构造时,如果系统发现在本类的无参构造的第一行没有this(Xxx xx) {} 有参构造调用 或者super调用,编译器会在无参构造中第一行自动加上super();这时就相当于两次调用super();也就是说父类进行了两次初始化。而实例化一个对象,一个构造器只能调用一次,所以会编译错误。如果在本类的无参构造中又调用了本类的有参构造,那么编译器会在本类的其他构造器的第一行加上super();也同样会编译错误。

2、

为什么this调用本类构造,务必放在构造方法的第一行。super调用父类构造,务必放在子类构造方法首行。

首先,子类是从父类继承而来,继承了父类的属性和方法,如果在子类中不完成父类成员的初始化,则子类无法使用,因为在java中不允许调用没初始化的成员。在构造器中是顺序执行的,也就是说必须在第一行进行父类的初始化。而super能直接完成这个功能,因此,this()或者super()必须放在第一行。


其次,如上面第一点说的,this或者super不放在构造器的第一行,编译器也会在构造器中的第一行自动放一个空参的super构造器,其他的构造器也可以调用super或者this,也会造成编译错误。

6.2.6 static关键字

static的独特之处

  • 被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象共享。
  • 在类被第一次加载时,就会去加载被static修饰的部分,而且只在类第一次使用时加载并进行初始化,注意这是第一次用就要初始化,后面根据需要是可以再次赋值的。
  • static变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分配。赋值的话,是可以任意赋值的。
  • 被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。

static存在的意义

  • 它能创建独立于具体对象的域变量或者方法。即使没有创建对象,也能使用属性调用方法!
  • 形成静态代码块以优化程序性能。static代码可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static的顺序来执行每个static块,并且只会执行一次。为什么说static块可以可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初始化的操作都放在static代码块中进行。

static应用场景

  • 修饰成员变量
  • 修饰成员方法
  • 静态代码块
  • 修饰类【只能修饰内部类也就是静态内部类】
  • 静态导包

static的注意事项

1、静态只能访问静态。


2、非静态既可以访问非静态的,也可以访问静态的。

6.3.1 自增运算符(++)和自减运算符(- -)

++和- - 运算符可以放在变量之前,也可以放在变量之后,当运算符放在变量之前时(前缀),先自增/减,再赋值;当运算符放在变量之后时(后缀),先赋值,再自增/减。例如:

 
 

6.3.2 移位运算符

移位运算符时最基本的运算符之一,几乎每种编程语言都包含这一运算符。移位操作中,**作的数据被视为二进制,移位就是将二进制数向左或者向右移动若干位的运算。

移位运算符在各种框架以及JDK自身的源码中使用还是挺广泛的,HashMap(JDK1.8)中的hash方法的源码就用到了位移运算符(hash方法源码如下)

 
 

在java代码中使用、和转换成的指令码运行起来会更高效些。


掌握最基本的移位运算知识还是很有必要的,不光可以帮助我们在代码中使用,还可以帮助我们理解源码中涉及到移位运算符的代码。

Java中有三种移位运算符:

  • :左移运算符,向左移若干位,高位丢弃,低位补零。,相当于x乘以2(不溢出的情况下)。
  • :带符号右移,向右移若干位,高位补符号位,低位丢弃。正数高位补0,负数高位补1。,相当于x除以2。
  • :无符号右移,忽略符号位,空位都以0补齐。

由于、在二进制中的表现比较特殊,因此不能来进行移位操作。


移位操作实际上支持的类型只有和,编译器在对、、类型进行移位前,都会将其转换为类型再操作。

如果移位的位数超过数值所占有的位数会怎么样?

当int类型左移/右移位数大于等于32位操作时,会先求余(%)后再进行左移/右移操作。也就是说左移/右移32位相当于不进位操作(32%32=0),左移/右移42相当于左移/右移10位(42%32=10)。当long类型进行左移/右移操作时,由于long对应二进制是64位,因此求余操作的基数也变成了64。

也就是说:x位int类型时, 等同于, 等同于 , 等同于。

左移运算符代码示例:

 
 

输出结果:

 
 

由于左移位数大于等于32位操作时,会先求余(%)后再进行左移操作,所以下面的代码左移42位相当于左移10位(42%32=10),输出结果和前面的代码是一样的。

 
 

右移运算符使用类似。

&、| 、^、~(按位与、按位或、按位异或、按位取反)

  • &(按位与):参加运算的两个数,按二进制位进行与运算。
    运算规则:两个数的二进制同为1,结果才为1,否则为0。
  • |(按位或):参加运算的两个数,按二进制位进行或运算
    运算规则:两个数的二进制只要有一个为1结果就是1。
  • ^(异或运算符):参加运算的两个数,按二进制位进行异或运算
    运算规则:两个数的二进制值不同,结果为1。
  • ~(按位取反):将内存中的补码按位取反(包括符号位),所以先要得到补码。
    1.对正数进行按位取反:原码 = 反码 = 补码 --> 按位取反 --> 减一变成原码 --> 符号位不变再取反得到反码
    2.对负数进行按位取反:原码 --> 保留符号位取反 --> 反码 -->加1 -->补码 -->按位取反包括符号位 --> 正数补码=原码=反码

具体示例:

 
 

&与&&的区别

&运算符有两种用法:

按位与

逻辑与

&&运算符是短路与运算。逻辑与跟短路与的差别非常大,虽然两者都要求运算符左右两端的布尔值都是true,整个表达式的值才是true。&&之所以称为短路与运算,是因为如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。

注意:

逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是有时候可以需要在循环的过程中,当发生某种条件后,提前终止循环,这就需要用到下面几个关键词。

  • :指跳出当前的这一次循环,继续下一次循环。
  • :指跳出整个循环体,继续执行循环下面的语句。

是用于跳出所在方法,结束该方法的运行。return一般有两种用法:

  • :直接使用return结束方法执行,用于没有返回值函数的方法。
  • :return一个特定值,用于有返回值函数的方法。

下面这段程序的运行结果是?

 
 

运行结果:

 
 

成员变量和局部变量的区别?

  • 语法形式: 从语法形式上看,成员变量属于类的,而局部变量是在代码块或者方法中定义的变量或者是方法的参数;成员变量可以被, , 等修饰符所修饰,而局部变量不能被访问控制修饰符及所修饰;但是,成员变量和局部变量都能被所修饰。
  • 存储方式: 从变量在内存中的存储方式来看,如果成员变量是使用修饰的,那么这个成员变量是属于类的,如果没有使用修饰,这个成员变量是属于实例的。成员变量随着对象的创建而存在,随着对象的消失而消失,而对象存在于堆内存,局部变量是在方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结束后,就自动释放。
  • 生存时间: 从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
  • 默认值: 从变量是否有默认值来看,成员变量如果没有被赋予初始值,则会自动以类型的默认值而赋值(一般情况例外:被修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。所以局部变量使用前必须赋值。

你好! 这是你第一次使用

Markdown编辑器

所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

撤销:Ctrl/Command + Z


重做:Ctrl/Command + Y


加粗:Ctrl/Command + B


斜体:Ctrl/Command + I


标题:Ctrl/Command + Shift + H


无序列表:Ctrl/Command + Shift + U


有序列表:Ctrl/Command + Shift + O


检查列表:Ctrl/Command + Shift + C


插入代码:Ctrl/Command + Shift + K


插入链接:Ctrl/Command + Shift + L


插入图片:Ctrl/Command + Shift + G


查找:Ctrl/Command + F


替换:Ctrl/Command + G

直接输入1次#,并按下space后,将生成1级标题。


输入2次#,并按下space后,将生成2级标题。


以此类推,我们支持6级标题。有助于使用语法后生成一个完美的目录。

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">

引用文本

/blockquote>

H

2

O is是液体。

2

10

运算结果是 1024.

链接: link.

图片:


语雀java面试题 java语言面试_父类_02

带尺寸的图片:


语雀java面试题 java语言面试_System_03

居中的图片:


语雀java面试题 java语言面试_父类_04

居中并且带尺寸的图片:


语雀java面试题 java语言面试_父类_05

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 .

 
 

  • 项目

ul data-indent="1">

  • 项目
  • ul data-indent="2">

  • 项目
    1. 项目1
    2. 项目2
    3. 项目3



    一个简单的表格是这么创建的:

    br> 使用居左

    br> 使用居右

    col>

    col>

    col>

    创建一个自定义列表

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML。

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 语雀java面试题 java语言面试_java_06

    语雀java面试题 java语言面试_System_07

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid

    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接

    长方形

    圆角长方形

    菱形

    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no

    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入


    1. mermaid语法说明 ↩︎
    2. 注脚的解释 ↩︎

  • 上一篇: java核心基础总结
  • 下一篇: 黑马java 2017基础
  • 版权声明


    相关文章:

  • java核心基础总结2025-04-21 14:42:06
  • java基础428讲解2025-04-21 14:42:06
  • java语言培训基础2025-04-21 14:42:06
  • java基础书籍2025-04-21 14:42:06
  • java基础27讲2025-04-21 14:42:06
  • 黑马java 2017基础2025-04-21 14:42:06
  • java基础考点笔记2025-04-21 14:42:06
  • java基础应用编程2025-04-21 14:42:06
  • 马士兵java基础2025-04-21 14:42:06
  • java语法基础变量2025-04-21 14:42:06