Java基础

1.Java语言三大特性

  1. 封装:
    首先,属性是用来描述同一类事物的特征,方法来描述同一类事物的操作。封装是把属于同一类事物的共性归到一个类中用来使用。
    封装又可以成为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装到一起,使结构完成成为一个整体。数据被保护在抽象数据类型的内部,尽可能的隐藏内部细节。也就是用户无需知道对象内部实现细节,但可以根据对象提供的外部接口访问对象。
    好处:1. 实现分工。 2. 隐藏信息。
  2. 继承
    1. 一个类继承另一个类,被继承的类为父类,继承的类为子类。Object是所有类的父类 也叫超类。
    2. 目的:实现代码的复用。
  3. 多态
    1. 多态就是在抽象的层面上试试一个统一的行为,到个体的层面上时,这个统一的行为会因为个体的形态特征而实施自己的特征行为。

2.Java语言主要特点

  1. 易学。语法和c、c++接近。
  2. 强制面向对象。提供类、接口、继承等,只支持单继承、接口支持多实现。
  3. 分布式。
  4. 健壮性。提供良好的强类型机智、异常处理、垃圾的自动回收机制、取消指针等。
  5. 安全性。提供安全防护机制(如:classLoader);
  6. 中立。编译后的class文件在各种系统中都可以运行。
  7. 解释型。字节格式多种平台都可以用解释器运行。
  8. 性能略高。
  9. 支持多线程

3.JDK和JRE的区别

  1. JDK是java的开发工具,提供了Java的开发环境和运行环境。
  2. JRE是java的运行环境,提供了Java运行所需环境。
    如果只是要运行java项目只又JRE就是足够的,如果要编辑才会需要JDK环境。

4. Java基本数据类型

  1. 数值型
    1. byte 占用 1字节空间 默认值 0 封装类 Byte
    2. short 占用 2字节空间 默认值 0 封装类 Short
    3. int 占用 4字节空间 默认值 0 封装类 Integer
    4. long 占用 8字节空间 默认值 0 封装类 Long
  2. 浮点型
    1. float 占用 4字节空间 默认值 0.0f 封装类 Float
    2. double 占用 8字节空间 默认值 0.0d 封装类 Double
  3. 布尔类型
    1. boolean 占用 - 默认值 false 封装类 Boolean
      注:单独使用占用4字节 数组中使用占用1字节
  4. 字符型
    1. char 占用2字节 默认\u0000(null) 封装类 Character
      注:
      1. 为什么要封装:因为泛型类包括预定义集合,使用的参数都是对象形式,无法直接使用基本数据类型。
      2. 基本数据类型和对应的封装类型本质不同;
        1. 基本类型只能值传递,封装类引用传递
        2. 基本类型存储在栈中,而对象类型,对象在堆中创建,基本类型由于在栈中,效率会比较高,但是存在内存泄漏的风险。

5.如果main方法被标注private会如何?

能编译,但是运行时会提示main方法不是puvlic的。idea会自己去掉运行按钮。

6.public static void main(String[] args )每个关键字的含义

  1. public 共有
  2. static 静态
  3. void 无返回值
  4. main 方法名
  5. String 传参类型
  6. args 变量名称

7.==和equals的区别

  1. == 判断的是地址,是两个对象在内存里是不是存储在同一位置,两个String对象存储的值相同,但是内存地址可能不同。String str = “a”; String str1 = new String(“a”);
  2. ==比较的是引用,equals比较的内容。默认两个对象的内容相同则返回tree,否则返回false;
    题外:
    equals 比较是全面比较是完全可靠的比较,但是对比hashCode性能慢,但是hashCode是不完全可靠的,因为hash算法原因两个对象可能存在hash值相同的情况下(又称为hash冲突),所以hashCode是性能高的,但不完全可靠的比对方式。

8.while循环和do循环的区别

  1. while是先判断后巡检,do是先循环一次后判断。

9.char型能存储一个中文吗?

  1. 能,因为char是2个字节16位,java默认Unicode编码,uniccode码占16位。

10. &和&&的区别

  1. & 前后都要判断,如果 a=b & b = c 如果 a=b是false 那么 他还会判断 b=c ,&& 不会

11. IntegerCache

  1. -128~127之间是存在缓存。当 Integer a = 127; Integer b = 127; a = b 是不会创建新的对象而是复用所以是 true; 超过 128时 不获取缓存而是创建对象所以是false; 注意 int 是基础数据类型 不适用上述规则。

12.java中final、finally、finalize

  1. final 常量修饰符 修饰类,类不能被继承,修饰方法,方法不能被重写,修饰变量,如果是基本数字类型那么值不能改,如果是引用类型的变量,那么引用的对象不能变,但是内容可以改(如 final Map 可以通过 put修改内容);
  2. finally 用在 try{}catch(){}finally{}中 finally 中的逻辑是必须被执行的,如果有返回值 在执行到return是会先扫描是否有 finally 如果有 会执行 finally内的内容,如果是catch中执行也会扫描finally,如果 catch中和 finally中都有 return 也会先执行 finally中的return catch中的return 不生效。
  3. finalize 是object中的方法,实施资源清理工作。

13.hashCode和equals

  1. 阿里巴巴开发规范明确规定
    只要重写 equals,就必须重写 hash Code因为Set存储的是不重复的对象,依据 hash Code和 equals进行判断,所以Set存储的对象必须重写这两个方法;如果自定义对象做为Map的键,那么必须重写 hash Code和 equalsString重写了 hash Code和 equals方法,所以我们可以非常愉快地使用 String对象作为key来使用
  2. 什么时候需要重写?
    一般的地方不需要重载 hash Code,只有当类需要放在 Iash Table、 Hashmap、 Hashset等等hash结构的集合时才会重载 hash Code
  3. 那么为什么要重载 hash Codel呢?
    如果你重写了 equals,比如说是基于对象的内容实现的,而保留 hash Codel的实现不变,那么很可能某两个对象明明是“相等",而 hash Code却不一样这样,当你用其中的一个作为键保存到 hashmap、 hasotabler或 hash Setl中,再以“相等的"找另一个作为键值去査找他们的时候,则根本找不到
  4. 为什么 equals()相等, hash Code就一定要相等,而 hash Code相等,
    却不要求 equals/相等?因为是按照 hash Code来访问小内存块,所以 hash Code.必须相等。Hashmap获取一个对象是比较key的 hash Code相等和 equals?为tue。之所以 hash Code相等,却可以 equal不等,就比如 Objecta和 Object他们都有属性name,那么hash Code都以name计算,所以 hash Code-一样,但是两个对象属于不同类型,所以 equals为 False5、为什么需要 hash Code?通过 hash Code可以很快的査到小内存块。通过 hash Codel比较比 equals方法快,当get时先比较 hash Code,如果 hash Code不同,直接返回false

14.深拷贝和浅拷贝有什么区别?

  1. 深拷贝是会连引用和引用对象的值一起复制,修改拷贝出来的对象内的内容是不会影响最初的数据的。
  2. 浅拷贝是复制引用,引用所指向的对象没有被复制,所以修改浅拷贝复制出来的对象是会影响最初的数据的内容的。

15.java中操作字符串的类有哪些?区别

  1. String String是不可变的 每一次操作都会创建新的对象。
  2. StringBuffer 可变的 每次修改都是在原来的基础上进行操作线程安全。
  3. StringBuilder 同StringBuffer,但是是线程不安全的效率略高。

16. String a = “a” 和 String a = new String(“a”)一样吗?

  1. 不一样,a = “a” 存放在 常量池。new 是堆。

17. static 5个问题

  1. 抽象的方法是否可以是静态的? 不行 因为抽象方法就是要用来重写的,而静态方法是不能重写的。
  2. 是否能从一个静态的方法内部访问非静态方法? 可以但是必须先创建对象,直接调用不行。
  3. static是否可以用来修饰局部变量? 不行
  4. 内部类和静态内部类的区别?
    1. 静态内部类相对于外部类是独立存在的,在静态内部类中无法直接访问外部类中的变量、方法。如果要访问要先创建外部类的对象。
    2. 内部类相对于外部类是整体,可以直接调用变量和方法。
  5. java中是否可以覆盖一个private或者是static的方法?
    1. java中static的方法是不能被覆盖的,因为方法覆盖是基于运行时静态绑定的,而static方法是编译时静态绑定的。

18.重载(Overload)和重写(Override)的区别。从在方法是否可以根据返回类型进行区别?

  1. 两者都是多态的一种表现形式。重载发生在一个类中,表现为方法名相同但是参数不同。重写发生在继承中,子类重写父类方法的逻辑保持方法名参数返回一致。
  2. 重载对返回类型没有特别要求,所以不能通过返回类型区别。

19.java的四种引用类型

  1. 强引用 如(String str = “a”)强引用是不会被垃圾回收机制回收的。
  2. 弱引用,用于描述还有用但是非必要的对象,如果内存足够就不会被回收,如果内存不足是则回收。一般用于实现内存敏感的高速缓存。
  3. 弱引用,周期比软引用更短,被扫描到就会回收。
  4. 虚引用 主要是用于跟踪对象被垃圾回收器回收的活动。

20. Java中 Comparator与 Comparable有什么不同

  1. Comparable接口用于定义对象的自然顺序,是排序接口,而 comparator通常用于定义用户定制的顺序,是比较接口。我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现 Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序。 Comparable总是只有一个,但是可以有多个 comparator来定义对象的顺序.

21. 什么是序列化,什么是反序列化?

  1. 序列化是指对象转换成字节序列的过程,反序列化是指字节转换成对象的过程。

22.什么情况需要序列化?

  1. 当对象需要在网络上传输,或者持久化到存储到文件中。

23.序列化的实现?

  1. 让类实现Serializable接口,标注该类对象可以被序列化。

24.Java泛型和类型擦除?

  1. 反省是参数化类型,在创建集合时指定集合元素类型,此集合只能存储该类型。
  2. 数据擦除时指java编译器生成的字节码不包含泛型信息,所以在变异时被擦除:1.泛型用顶级父类替换。2移除

25.什么是线程?说明是进程?程序是什么?

  1. 进程是 资源分配的基本单位。
  2. 线程是 程序执行的基本单位
  3. 说明是程序 存在在磁盘空间的 qq.exe

26.程序如何启动?

  1. CPU 从内存中读取数据 存放到 寄存器中 ,通过 ALC计算 然后传回内存。

27. 说明是线程切换

  1. cpu执行命令是通过 os 来调度的,在调度过程中不是一直执行一个线程,而是会在线程之间进行切换,cpu会把每一次的线程执行到哪一行进行记录(记录在cache中),用来下次执行的时候继续执行。

28.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值