一只不甘沦为码农的程序猿

Java基础知识

2019-03-24  本文已影响0人  zorkelvll
image

ZERO

    持续更新 请关注:https://zorkelvll.cn/blogs/zorkelvll/articles/2018/12/03/1543842689567

背景

    本文主要记录java相关的基础知识点,供平日里总结学习使用!

20181208

1、java异常处理

2、java序列化中如果有些字段不想进行序列化,可以怎么办?

    可以使用transient关键字修饰,该关键字作用是阻止实例中那些用此关键字修饰的变量序列化,当对象被反序列化时被transient修饰的变量不会被持久化和恢复;transient只能修饰变量,不能修饰类和方法

3、获取用键盘输入的两种常用方法

4、Java基础学习书籍

20181205

1、为什么java中只有值传递?

    在程序设计语言中,按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。它用来描述各种程序设计语言(不只是Java)中方法参数传递方式。

Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。java程序设计语言对对象采用的不是引用调用,实际上,对象引用是按 值传递的。

2、程序 VS 进程 VS 线程

3、线程有哪些基本状态?这些状态是如何定义的?

jpeg

备注: 可以用早起坐地铁来比喻这个过程:

还没起床:sleeping

起床收拾好了,随时可以坐地铁出发:Runnable

等地铁来:Waiting

地铁来了,但要排队上地铁:I/O阻塞

上了地铁,发现暂时没座位:synchronized阻塞

地铁上找到座位:Running

到达目的地:Dead

4、关键字final

    final主要用于变量、方法、类三个地方;

20181204

1、自动装箱与拆箱

2、为什么静态方法内调用一个非静态成员是非法的?

    这是因为静态方法是属于类的,不能够通过对象进行调用,所以在静态方法里不能使用其他非静态变量以及其他非静态方法

3、java中定义一个无参数且没有功能的构造方法的作用是啥?

    java程序在执行子类的构造方法之前,如果没有使用super()来调用父类特定的构造方法,则会调用父类中“无参构造犯法” => 因此,若父类中只定义了有参构造方法,且在子类构造方法中又没有用super()来调用父类的特定构造方法,则编译时将发生错误! => 这是因为java程序在父类中找不到无参构造方法可以执行,,,解决办法就是在父类中加上一个无参且没有什么功能的构造方法即可!

在调用子类构造方法之前会先调用父类无参构造方法,其目的是:帮助子类做初始化工作

4、import java 和 import javax的区别

    早期,JavaAPI所必需的的包是java开头的包,javax只是扩展API包;;随着时间的推移,javax逐渐也成为了JavaAPI的组成部分,实际上现在java和javax没有区别

5、接口 VS 抽象类

6、成员变量 VS 局部变量

7、对象实体 VS 对象引用 ;; 用什么运算符创建一个对象?

    new运算符创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中);一个对象引用可以指向0或1个对象,一个对象可以有n个引用指向它

8、静态方法 VS 实例方法

9、对象的相等 VS 引用的相等

对象的相等,比较的是在内存中存储的内容是否一致;而引用的相等,比较的则是它们所指向的内存地址是否相等

10、 == VS equals()

(1)类没有重写覆盖equals()方法,则equals方法,等价于==

(2)类重写覆盖equals()方法,一般都是判断两个对象的内容是否相等的,若它们的内容相等则返回true

=>当创建String类型对象时,虚拟就就会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它直接赋给当前引用,否则就在常量池中重新创建一个String对象

11、hashCode() VS equals()

    重写过hashCode()和equals()嘛?为什么重写equals时必须重写hashCode方法?

20181203

1、面向对象与面向过程的区别

2、Java语言特点

3、JDK\JRE\JVM

=》JDK用以开发,JRE用以运行;JDK&JRE均包含JVM;JVM是java编程语言的核心且具有平台独立性

4、字节码

Java源代码=》经过 编译器 编译后 =》变成 jvm可执行的字节码(即虚拟指令)=》jvm 将每一条要执行的字节码 =》 送给 解释器 => 解释器将其翻译成特定机器上可执行的机器码 => 程序运行

供虚拟机理解的代码称之为字节码(.class文件),不面向任何特定的处理器,只面向虚拟机

优点:java语言通过字节码方式,一定程序上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点 =》因此,java程序运行时比较高效,且字节码并不是专对一种特定的机器使得java程序无需重新编译即可在不同计算机上运行

5、Java VS C++

6、java程序主类:应用程序主类 VS 小程序主类

一个java程序可以有多个类,但是只能有一个类是主类;主类是java程序执行的入口点

7、java应用程序 VS java小程序

8、字符型常量 VS 字符串常量

9、重写override VS 重载overload

=>构造器Constructor是否可被重写override?:不能,在继承时父类的私有属性和构造方法是不能被继承的,所以Constructor也就不能被重写override,但是可以被重载overload即一个类中有多个构造函数

10、面向对象三大特性-封装、继承、多态

    =》子类拥有父类非private的属性和方法

    =》子类可以拥有自己的属性和方法,即子类可以对父类进行扩展

    =》子类可以用自己的方式去实现父类的方法(重写override)

11、String VS StringBuffer VS StringBuilder,且为什么String是不可变的?

    String类中使用final关键字修饰字符数组用以保存字符串,即private final char value[],因此String对象不然是不可变的

    而StringBuffer和StringBuilder,均继承自AbstractStringBuilder类,且该类也是使用字符数组用以存储字符串的,即char[] value,没有final修饰符,因此是可变的

    String中对象是不可变的,即可认为是常量,因此是线程安全的;

    AbstractStringBuilder类是StringBuffer和StringBuilder的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法;StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,因此是线程安全的;而StringBuilder并没有对方法进行加同步锁,因此是非线程安全的

    每次对String类型进行改变的时候,都会生产一个新的对象,然后将引用指向新的String对象;而StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用;相同情况下,使用StringBuilder比使用StringBuffer仅能获得10%~15%左右的性能提升,但却要冒多线程不安全的危险

    操作少量的数据 = String

    单线程操作字符串缓冲区下操作大量数据 = StringBuilder

    多线程操作字符串缓冲区下操作大量数据 = StringBuffer

说明:本JavaGuide系列博客为来源于https://github.com/Snailclimb/JavaGuide
等学习网站或项目中的知识点,均为自己手打键盘系列且内容会根据继续学习情况而不断地调整和完善!

上一篇 下一篇

猜你喜欢

热点阅读