java学习总结(一),经过一个月的失败面试

@1228205642qq.com JAVA基础总结

这是一篇关于自己的JAVA学习的总结

2020年三月,到了自己找实习的时间了,本以为自己在实验室做过一个项目,应该还可以。本着初生牛犊不怕虎的心态毫无准备地面试了京东JAVA实习生,一个个java基础问题下来我发现自己好像什么都不懂。(PS:我在某C9之下的985大学学的信息安全专业)

**

什么是JAVA

**
我们都知道JAVA是一门纯面向对象语言,一门解释型语言。
纯面向对象: java中除了基本类型外所有类型都是类。有时候我们看不懂代码的时候回头想想这句话,有些东西比如注解啊什么的,不理解的东西至少我们能知道它就是一个类。
解释型语言:什么是解释型语言呢?我们这里又会涉及到编译型语言的区别。我们要理解的是给人看的代码机器看得懂吗?答案是看不懂,所以代码肯定会有一个转换成机器码的过程。编译型语言(如C/C++)执行过程是 源代码----->可执行的二进制代码,
而解释型语言(JAVA/PYTHON)是 源代码——>编译器——>字节码(.class文件)——>JVM执行。 所以有了虚拟机,我们的java代码就能做到一次编译到处执行了。至于jvm,我会在之后的文章中更新。

JAVA的特性

抽象、封装、继承、多态

封装指的是隐藏实现的细节和属性,对外提供修改属性的接口。如何解释封装又是一片文章了,大家可以自行去查找相关解释。
继承:这个就不用说了吧。。
多态:多态的概念是不同对象对同一消息做出的不同行为。大家可以去看看其他文章讲多态与方法的重写与重载

JAVA——单继承多实现

java只支持单继承,也就是说一个类最多只能继承一个类,但是可以通过实现多个接口来达到多继承的效果(面试题可能会考:java如何实现多继承?)

接口和抽象类

这个是常考的面试题了,接口满足的抽象类的定义。但是接口和抽象类还有一下区别
1.格式上 接口是public修饰 抽象类默认是default。
2.都不能被实例化,子类或实现类都必须重写抽象方法才能被实例化。
3.抽象类的变量默认为default,也可以定义为public,可以被子类覆盖或重新定义。而接口中的变量是常量即 public static final 修饰的。

抽象类没有接口那么常用,接下来说一下接口的知识:
1.接口的变量是常量。
2.java8之后接口中允许定义默认方法(default)和静态方法。
3.java9之后可以定义私有方法。

插播一小点GC

垃圾回收器回收一个对象前先调用了该对象的finalize()方法。

final、finalize、finally区别

final:是一个关键字,被final修饰的变量是常量,被final修饰的方法不可被重写,被final修饰的类不可被继承(final把它断子绝孙了嘿嘿)
finalize:是Object的一个方法,见上文,看过别人对finalze的调查,实际上这个方法没什么卵用(对于我这种水平的five来说)。
finally:用在try catch语句之后的声明被finally包裹的代码块不管有没有捕获异常都会被执行。 1.如果try/catch中有ruturn,则会在ruturn之前执行finally语句块。
2.如果try中有ruturn,则会覆盖try/catch中的ruturn。
ps:finally不被执行的情况有哪些呢?
第一种是 没有执行try代码块
第二种是在try/catch中使用System.exit(0) 强制退出

重写与重载

重写:发生在子类和父类之间,参数列表、返回值都必须相同,只有方法中的逻辑不同。
重载:只有方法名相同,即一个类中可以有多个同名的方法,但是根据参数可以选择不同 的方法来处理。

JAVA初始化顺序

三个原则:1.静态变量先于非静态变量
2.父类先于子类
3.成员变量先于方法(包括构造方法)

初始化顺序在学习了JVM之后会更能理解,现在就先背一背三个原则吧

作用域和可见性

private:当前类
default:当前类、当前包
protect:当前类、当前包、子类
public:当前类、当前包、子类、其他包

ps:子类只能继承父类的非私有方法和成员变量:public、protect

java文件

这道题笔试常考:一个java文件中可以有多个类(class)、但是只能由一个类被public修饰且类名与文件名相同。

clone()方法

当我们想创建一个副本的时候,可以调用clone()方法,赋值一个对象。当然,被赋值的对象必须实现cloneAble接口并且重写clone()方法。这里又牵扯到深复制和浅复制的区别。看下图
在这里插入图片描述

内部类

有四种:1.静态内部类 2.成员内部类 3.局部内部类 4.匿名内部类
内部类不太常考,也不太常见,但还是要了解,至少看到的时候知道这是什么。
静态内部类:顾名思义,就是在类中还有一个static class 。。。{};
成员内部类:比静态内部类少了个static
局部内部类:在某类的方法中的 class 。。。{}
匿名内部类:必须实现一个接口或继承一个父类。

匿名内部类越来越少见了,我就没有深入研究了,有兴趣的小伙伴可以研究一下。

接下来讲一下static

1.静态变量:被static修饰的变量在类被加载时,会分配内存空间。分配到哪里呢?在jvm运行时数据区的方法区中的常量池中。因为被分配内存了,所以我不需要创建这个对象就可以访问这个类的该变量。
2.静态方法:同理,静态发发可以直接访问无需创建对象。
3.static:可以用来实现单例模式。单例模式:隐藏构造方法,提供静态方法获取类的实例。即全局只有一个该单例对象。
4.内部类可以被static修饰。

上述是static的用途。static又涉及到类的加载过程,又牵扯到JVM,所以说JVM是学习java的核心。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值