Java面试手册V2.0+突击V3.0知识点整理(一) 附封面图片


虚静出内功

!](https://img-blog.csdnimg.cn/90c33fb91b4344dc8670dd4a78bde274.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAb3JpZ2luYWxGWkg=,size_20,color_FFFFFF,t_70,g_se,x_16)


1. Java语言三大特性
1. 封装:
  • 属性用来描述同一类事物的特征,方法可描述一类事物可做的操作
  • 封装就是把属于同一类事物的共性(包括属性和方法)归到一个类中,以方便使用
  • 概念:
	封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,
	数据被保护在抽象数据类型的内部,尽可能隐藏内部细节,只保留一些对外接口使之与外部发生联系。系统的其他部分
	只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。也就是说,用户无需知道对象内部方法的
	实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象
  • 好处:
    1. 实现了专业的分工。将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工
    2. 隐藏信息,实现细节。通过控制访问权限可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行密码需保密,只能给该客户开发权限
2. 继承
  • 通俗来讲就是个性对共性的属性与方法的接受,并加入个性特有的属性与方法(继承并发扬光大)
  • 概念:
   	一个类继承另一个类,则称继承的类为子类,被继承的类为父类
  • 目的:实现代码的复用
  • 理解:子类与父类的关系并不是日常生活中的父子关系,子类与父类而是一种特殊化与一般化的关系,是is-a的关系,子类是父类更加详细的分类。如class dog extends animal, 就可以理解为dog is a animal。注意设计继承的时候,若要让某个类能继承,父类需适当开放访问权限,遵循里氏代换原则,即向修改关闭对扩展开放,也就是开-闭原则
  • 结果:继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承
  • 补充:子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写
3. 多态
  • 多态的概念发展出来,是以封装和继承为基础的
  • 多态就是在抽象的层面上实施一个统一的行为,到个体(具体)的层面上时,这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为(针对一个抽象的事,对于内部个体又能找到其自身的行为去执行)
  • 概念:
	相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同
  • 理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。子类以父类的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的,是安全的,但向下转型(downcast)是不安全的,需要强制转换。子类以父类的身份出现时自己特有的属性和方法将不能使用

2. Java 语言主要特性
  1. Java语言较为易学
  2. Java语言是强制面向对象的。
	Java只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(implement)
  1. Java语言是分布式的
	Java语言支持Internet应用的开发,在基本的java应用编程接口中有一个网络应用编程接口(java net), 它提供了用于网络应用编程的类库,
	包括URL,URLCconnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段
  1. Java语言是健壮的
	Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。Java丢弃了指针
  1. Java语言是安全的
	Java通常被用在网络环境中,为此,Java提供了一个安全机制以防止恶意代码的攻击。如安全防范机制(类ClassLoader),如分配不同的名字空间
	以防替代本地的同名类、字节代码检查
  1. Java语言是体系结构中立的,是解释型的
	Java 程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何
	系统中运行(一次编译,到处运行)
  1. Java语言性能较高
  2. Java语言是原生支持多线程的
	在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建

3. JDK、JRE区别
  • JDK:Java Development Kit的简称,Java开发工具包,提供了Java开发和运行环境
  • JRE:Java Runtime Environment简称,Java运行环境,为Java的运行提供了所需环境
    JDK包含了JRE和Javac(源码编译器)、其他Java调试分析工具等
    只需要运行Java程序时,只需JRE即可;需要编写Java代码时,需要安装JDK

4. Java基本数据类型及其封装类
  • 基本类型与封装类对照表:
    在这里插入图片描述
    其中,boolean类型占了单独使用时4个字节,在数组中又是1个字节

  • 基本类型所占的存储空间是不变的,这种不变性也是Java具有可移植性的原因之一

  • 基本类型放在栈中,直接存储值

  • 所有数值类型都有正负号,没有无符号的数值类型

  • 为什么需要封装类?

	因为泛型类包括预定义的集合,使用的参数都是对象类型,无法直接使用基本数据类型,所以Java又提供了这些基本类型的封装类
  • 基本类型和对应的封装类由于本质的不同,具有一些区别:
	1. 基本类型只能按值传递,而封装类按引用传递
	2. 基本类型会在栈中创建,而对于对象类型,对象在堆中创建,对象的引用在栈中创建,基本类型由于在栈中,效率会比较高,但是
	   可能会存在内存泄漏问题
  • 自动装箱与拆箱
	装箱:将基本类型用它们对应的引用类型包装起来
	拆箱:将包装类型转换为基本数据类型

5. 如果main方法被声明为private会怎样?
  • 能正常编译,但运行的时候会提示“main方法不是public的”,在idea中如果不用public修饰,则会自动去掉可运行的按钮

6. public static void main(String args[])这段声明中每个关键字作用是什么?
  • public:main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见,所以可见性设置为public
  • static:Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static
  • void :main方法没有返回值
  • String是命令行传进参数的类型,args是指命令行传进的字符串数组

7. == 与 equals 的区别
  • == :判断两个对象的地址是否相等,即判断两个对象是不是同一个对象(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方
  • equals():作用也是判断两个对象是否相等,一般有两种使用情况:
  1. 情况一:类没有覆盖equals()方法,则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象
  2. 情况二:类覆盖了equals()方法。一般,我们都覆盖equals()方法来比较两个对象内容相等,若它们的内容相等,则返回true
  • == 比较的是引用而equals方法比较的是内容。public boolean equals(Object obj)这个方法是由Object对象提供的,可以由子类进行重写。默认的实现只有当对象和自身进行比较时才会返回true,这个时候和 == 是等价的。String,BitSet, Date和File都对equals方法进行了重写,对两个String对象而言,值相等意味着它们包含同样的字符序列。对于基本类型的包装类来说,值相等意味着对应的基本类型的值一样
  • 代码示例
	package otherDemo;
	
	public class EqualsDemo {
	    public static void main(String[] args) {
	        String s1 = "abc";
	        String s2 = s1;
	        String s5 = "abc";
	        String s3 = new String("abc");
	        String s4 = new String("abc");
	        System.out.println("== comparison: " + (s1 == s5)); // true, 引用相同
	        System.out.println("== comparison: " + (s1 == s2)); // true, 引用相同
	        System.out.println("Using equals method: " + s1.equals(s2)); // true, 内容相同
	        System.out.println("== comparison: " + (s3 == s4)); // false, 引用不同
	        System.out.println("Using equals method : " + s3.equals(s4)); // true, 内容相同
	    }
	
	}

在这里插入图片描述


8. Object有哪些公用方法?
Object是所有类的父类,任何类都默认继承Object
  • clone:保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常
  • equals:在Object中与==是一样的,子类一般需要重写该方法
  • hashCode:该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这些方法在一些具有哈希功能的Collection中用到
  • getClass:final方法,获得运行时类型
  • wait:使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回
调用该方法后当前线程进入到睡眠状态,直到以下事件发生:
1. 其他线程调用了该对象的notify方法
2. 其他线程调用了该对象的notifyAll方法
3. 其他线程调用了interrupt中断该线程
4. 时间间隔到了
5. 此时线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常
  • notify:唤醒在该对象上等待的某个线程
  • notifyAll:唤醒在该对象上等待的所有线程
  • toString:转换成字符串,一般子类都有重写,否则打印句柄

9. 为什么Java里没有全局变量
  • 全局变量是全局可见的,Java不支持全局可见的变量,因为:全局变量破坏了引用透明性的原则。全局变量导致了命名空间的冲突
10. while循环和do循环有什么不同?
  • while结构在循环的开始判断下一个迭代是否应该继续。do-while结构在循环的结尾来判断是否将继续下一轮迭代。do结构至少会执行一次循环体

下一篇:Java面试手册V2.0+突击V3.0知识点整理(二) 附封面图片😍


如果觉得封面图片还行,请顺手点个赞😍
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SimpleZihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值