java

什么是线程,什么是进程?

进程:应用程序一旦执行就是一个进程如一个app的运行就是一个进程。打开一个app系统自然会给你分配地址空间建立数据栈堆
线程:可以理解为进程执行的最小单位。
协程:是一种比线程更加轻量级的存在,不被系统控制,用户控制样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源
不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。回调地狱
jvm :虚拟机
jre:字典
JDK:开发工具

解释一下为什么Java可以跨平台?

ava语言跨平台的原因:半编译,半解释

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

面向过程:,面向过程其实按照步骤设计程序
面向对象:面向对象是以功能来划分问题

封装:

把方法的实现细节包装起来,封装可以认为是一种保护屏障,防止其他类随意访问
主要功能在于直接修改包起来的代码不用去改调的代码,这样使程序更容易维护和理解也增强安全
优点 1.减少了耦合2.利于维护3.提高了安全性

抽象:

抽象可以简单理解为抽取实物相似的部分,然后把他规划为一个类

继承:

在类原有的功能和属性的基础上加入父类的属性和方法提高了类的可用性和扩展性

多态

例如写个动物类 再写个吃(eat)的方法所有的动物都有这个功能,猫继承动物类并重写吃(eat)
这个方法吃的是鱼,狗继承动物类并重写吃(eat)却是骨头注意父类引用指向子类对
多态有三个必要条件:继承、重写、向上转型

什么是重载 & 什么是重写

重载:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
1.方法名相同
2.方法的参数类型,参数个不一样
3.方法的返回类型可以不相同
4.方法的修饰符可以不相同
5.main 方法也可以被重载
重写:重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
区别: 重写是父类与子类之间多态性的表现, 而重载是一个类中多态性的表现

谈谈你对this和super的认识

一、this
1.普通的直接引用2.形参与成员名字重名,用this来区分3.引用构造函数
二、super
1.普通的直接引用
与this类似,super相当于是指向当前对象的父类,这样就可以用super.xxx来引用父类的成员
2.子类中的成员变量或方法与父类中的成员变量或方法同名
3.引用构造函数
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

接口和抽象类的区别

  1. Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以
  2. 一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,
    而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来
    了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java
    接口,从而这个类就有了多种类型。(使用抽象类,那么继承这个抽象类的子类类型就比较单一,因为子类只能单
    继承抽象类;而子类能够同时实现多个接口,因为类型就比较多。接口和抽象类都可以定义对象,但是只能用他们
    的具体实现类来进行实例化。)
  3. 从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且
    具有其他的次要行为。
  4. 结合1、2点中抽象类和Java接口的各自优势,具精典的设计模式就出来了:声明类型的工作仍然由Java接口承担,
    但是同时给出一个Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接
    口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,这下两个
    的最大优点都能发挥到极至了。这个模式就是*“缺省适配模式*”。在Java语言API中用了这种模式,而且全都遵循
    一定的命名规范:Abstract +接口名。(A extends AbstractB implements interfaceC,那么A即可以选择实
    现(@Override)接口interfaceC中的方法,也可以选择不实现;A即可以选择实现(@Override)抽象类AbstractB
    中的方法,也可以选择不实现)
    在这里插入图片描述
    内部类的作用:
    1.增强封装,把内部类放在外部类当中,不允许其它类访问这个内部类。
    2.增加了代码一个维护性,不涉及到其他类。
    3.内部类可以直接访问外部类当中的成员

谈谈你对对象生命周期的认识?

方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息、常量、静态变量以及方法代码的内存区域,叫
做方法区。
常量池:常量池是方法区的一部分,主要用来存放常量和类中的符号引用等信息。
堆区:用于存放类的对象实例。
栈区:也叫java虚拟机栈,是由一个一个的栈帧组成的后进先出的栈式结构,栈桢中存放方法运行时产生的局部变
量、方法出口等信息。当调用一个方法时,虚拟机栈中就会创建一个栈帧存放这些数据,当方法调用完成时,栈帧
消失,如果方法中调用了其他方法,则继续在栈顶创建新的栈桢。
一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段

说说Java中的8大基本类型 & 内存中占有的字节 & 什么是引用类型?

Java 基本数据类型与引用类型
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
在这里插入图片描述

什么是拆箱 & 装箱,能给我举例子吗?

1.装箱,值类型向引用类型转换:
2.拆箱,引用类型向值类型转换:

能说说多维数组在内存上是怎么存储的吗?

在这里插入图片描述

你对数组二次封装过吗?说说封装了什么?

  1. 使用泛型
  2. 将我们的数组封装为动态数组

常见的异常种类

ERROR类:
java.lang.OutOfMemoryError:最可怕的错误之一,JVM内存不足导致的Error,程序直接停止运行。
java.lang.StackOverflowError:最可怕的错误之一,JVM栈溢出错误,程序直接停止运行。
java.lang.NoClassDefFoundError:未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类
的定义时抛出该错误。 注意:NoClassDefFoundError和ClassNotFoundException的区别。
RuntimeException类:
java.lang.ClassCastException:强制类型转换异常,一般发生在向下类型转换过程中。
java.lang.IndexOutOfBoundsException:索引越界异常。 java.lang.NullPointerException:空指针异常。
java.lang.NumberFormatException:数字格式异常。 java.lang.ArithmeticException:算术条件异常。比如:除数为
零时。 java.lang.ArrayIndexOutOfBoundsException:数组索引越界异常。 java.lang.InstantiationException:实例
化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。
java.lang.InterruptedException:线程阻塞异常。
受检查异常类:
java.lang.ClassNotFoundException:找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPATH
之后找不到对应名称的class文件时,抛出该异常。 java.lang.NoSuchMethodException:找不到方法异常。 注意:上
面两个很容易被理解为RuntimeException,如果你去看了源码就会知道他们是受检查的异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值