类名规范首字符大写后面每个单词首字母大写大驼峰式。 变量名规范首字母小写后面每个单词首字母大写小驼峰式。方法名规范同变量名。
12、instanceof关键字的作用
instanceof 严格来说是Java中的一个双目运算符用来测试一个对象是否为一个类的实例用法为
其中 obj 为一个对象Class 表示一个类或者一个接口当 obj 为 Class 的对象或者是其直接或间接子类或者是其接口的实现类结果result 都返回 true否则返回false。
注意编译器会检查 obj 是否能转换成右边的class类型如果不能转换则直接报错如果不能确定类型则通过编译具体看运行时定。
13、什么是隐式转换什么是显式转换
显示转换就是类型强转把一个大类型的数据强制赋值给小类型的数据隐式转换就是大范围的变量能够接受小范围的数据隐式转换和显式转换其实就是自动类型转换和强制类型转换。
14、Char类型能不能转成int类型能不能转化成string类型能不能转成double类型
Char 在 java 中 也 是 比 较 特 殊 的 类 型 它 的 int 值 从 1 开 始 一 共 有 2 的 16 次 方 个 数 据 Char 15、什么是拆装箱 valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型Integer–>int。调用方法Integer的intValue方 法在Java SE5之前如果要生成一个数值为10的Integer对象必须这样进行 而在从Java SE5开始就提供了自动装箱的特性如果要生成一个数值为10的Integer对象只需要这样就可以了 面试题1 以下代码会输出什么 结果 16、Java中的包装类都是那些 byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacter booleanBoolean 17、一个java类中包含那些内容 属性、方法、内部类、构造方法、代码块。 18、那针对浮点型数据运算出现的误差的问题你怎么解决 使用Bigdecimal类进行浮点型数据的运算 19、面向对象的特征有哪些方面? 抽象: 抽象是将一类对象的共同特征总结出来构造类的过程, 包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 继承: 继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类、基类) ;得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性 ,同时继承也是封装程序中可变因素的重要手段(如果 不能理解请阅读阎宏博土的《Java 与模式》或《设计模式精解》中.关于桥梁模式的部分)。封装 通常认为封装是把数据和操作数据的方法绑定起来对数据的访问 只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自 治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装我们编写 一个类就是对数据和数据操作的封装。可以说封装就是隐藏一切可隐藏的东西 只向外界提供最简单的编程接口可以想想普通洗衣机和全自动洗衣机的差别 明显全自动洗衣机封装更好因此操作起来更简单我们现在使用的智能手机也是 封装得足够好的因为几个按键就搞定了所有的事情。 多态性 多态性是指允许不同子类型的对象对同一消息作出不同的响应。 简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务那么运行时的多态性可以解释为当 A 系统访问 B 系统提供的服务时B 系统有多种提供服务的方式但一切对 A 系统来说都是透明的就像电动剃须刀是 A 系统它的供电系统是 B 系统B 系统可以使用电池供电或者用交流电 甚至还有可能是太阳能A 系统只会通过 B 类对象调用供电的方法但并不知道供电系统的底层实现是什么究竟通过何种方式获得了动力。方法重载 overload实现的是编译时的多态性也称为前绑定而方法重写override 实现的是运行时的多态性也称为后绑定。运行时的多态是面向对象最精髓的 东西要实现多态需要做两件事1). 方法重写子类继承父类并重写父类中已有的或抽象的方法2). 对象造型用父类型引用引用子类型对象这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。 20、访问修饰符 public,private,protected,以及不写默认 时的区别 类的成员不写访问修饰时默认为 default。默认对于同一个包中的其他类相当于公 开public对于不是同一个包中的其他类相当于私有 private。受保护 protected对子类相当于公开对不是同一包中的没有父子关系的类相当于私 有。Java 中外部类的修饰符只能是 public 或默认类的成员包括内部类的 修饰符可以是以上四种。 21、String 是最基本的数据类型吗 不是。Java 中的基本数据类型只有 8 个byte、short、int、long、float、double、 char、boolean除了基本类型primitive type 剩下的都是引用类型reference typeJava 5 以后引入的枚举类型也算是一种比较特殊的引用类型。 22、float f3.4;是否正确 答:不正确。3.4 是双精度数将双精度型double赋值给浮点型float属于 下转型down-casting也称为窄化会造成精度损失 因此需要强制类型转换 float f (float)3.4; 或者写成 float f 3.4F;。 23、short s1 1; s1 s1 1;有错吗?short s1 1; s1 1; 有错吗 对于 short s1 1; s1 s1 1;由于 1 是 int 类型因此 s11 运算结果也是 int 型需要强制转换类型才能赋值给 short 型。而 short s1 1; s1 1;可以正确 编译因为 s1 1;相当于 s1 (short)(s1 1);其中有隐含的强制类型转换。 24、重载和重写的区别 重写**(Override)** 从字面上看重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法但有时子类并不想原封不动的继承父类中的某个方法所以在方法名参数列表返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下 对方法体进行修改或重写这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。 原因 在某个范围内的整型数值的个数是有限的而浮点数却不是。 重写 总结 1.发生在父类与子类之间 2.方法名参数列表返回类型除过子类中方法的返回类型是父类中返回类型的子类必须相同3.访问修饰符的限制一定要大于被重写方法的访问修饰符public>protected>default>private) 4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常 重载Overload 在一个类中同名的方法如果有不同的参数列表参数类型不同、参数个数不同甚至是参数顺序不同 则视为重载。同时重载对返回类型没有要求可以相同也可以不同但不能通过返回类型是否相同来判断重载。 重载总结 1.重载Overload是一个类中多态性的一种表现 2.重载要求同名方法的参数列表不同(参数类型参数个数甚至是参数顺序) 3.重载的时候返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准 25、equals与的区别 比较的是变量(栈)内存中存放的对象的(堆)内存地址用来判断两个对象的地址是否相同即是否是指相同一个对象。比较的是真正意义上的指针操作。 1、比较的是操作符两端的操作数是否是同一个对象。 2、两边的操作数必须是同一类型的可以是父子类之间才能编译通过。 3、比较的是地址如果是具体的阿拉伯数字的比较值相等则为true如 int a10 与 long b10L 与 double c10.0都是相同的为true因为他们都指向地址为10的堆。 equals equals用来比较的是两个对象的内容是否相等由于所有的类都是继承自java.lang.Object类的所以适用于所有对象如果没有对该方法进行覆盖的话调用的仍然是Object类中的方法而Object中的equals方法返回的却是的判断。 总结 所有比较是否相等时都是用equals 并且在对常量相比较时把常量写在前面因为使用object的 equals object可能为null 则空指针 在阿里的代码规范中只使用equals 阿里插件默认会识别并可以快速修改推荐安装阿里插件来排查老代码使用“”替换成equals 26、i与i的区别 i先赋值后计算 i先计算后赋值 27、程序的结构有那些 28、数组实例化有几种方式 静态实例化创建数组的时候已经指定数组中的元素, 动态实例化实例化数组的时候只指定了数组程度数组中所有元素都是数组类型的默认值 29、Java中各种数据默认值 Byte,short,int,long默认是都是0 Boolean默认值是false Char类型的默认值是’’ Float与double类型的默认是0.0 对象类型的默认值是null 30、Java常用包有那些 31、Object类常用方法有那些 32、java中有没有指针 有指针但是隐藏了开发人员无法直接操作指针由jvm来操作指针 33、java中是值传递引用传递 理论上说java都是引用传递对于基本数据类型传递是值的副本而不是值本身。对于对象类型传递是对象的引用当在一个方法操作操作参数的时候其实操作的是引用所指向的对象。 34、实例化数组后能不能改变数组长度呢 不能数组一旦实例化它的长度就是固定的 35、假设数组内有5个元素如果对数组进行反序该如何做 创建一个新数组从后到前循环遍历每个元素将取出的元素依次顺序放入新数组中 36、形参与实参区别 实参(argument) 全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等 无论实参是何种类型的量在进行函数调用时它们都必须具有确定的值 以便把这些值传送给形参。 因此应预先用赋值输入等办法使实参获得确定值。 形参(parameter) 全称为"形式参数" 由于它不是实际存在变量所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时实参将赋值给形参。因而必须注意实参的个数类型应与形参一一对应并且实参必须要有确定的值。 形参出现在函数定义中在整个函数体内都可以使用 离开该函数则不能使用。实参出现在主调函数中进入被调函数后实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。 1.形参变量只有在被调用时才分配内存单元在调用结束时 即刻释放所分配的内存单元。因此形参只有在函数内部有效。 函数调用结束返回 主调函数后则不能再使用该形参变量。 2.实参可以是常量、变量、表达式、函数等 无论实参是何种类型的量在进行函数调用时它们都必须具有确定的值 以便把这些值传送给形 参。 因此应预先用赋值输入等办法使实参获得确定值。 3.实参和形参在数量上类型上顺序上应严格一致 否则会发生“类型不匹配”的错误。 4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参而不能把形参的值反向地传送给实参。 因此在函数调用过程中 形参的值 发生改变而实参中的值不会变化。 5.当形参和实参不是指针类型时在该函数运行时形参和实参是不同的变量他们在内存中位于不同的位置形参将实参的内容复制一份在该 函数运行结束的时候形参被释放而实参内容不会改变。 而如果函数的参数是指针类型变量,在调用该函数的过程中传给函数的是实参的地址在函数体内部使用的也是实参的地址即使用的就 是实参 本身。所以在函数体内部可以改变实参的值。 37、构造方法能不能显式调用 不能构造方法当成普通方法调用只有在创建对象的时候它才会被系统调用 38、什么是方法重载 方法的重载就是在同一个类中允许同时存在一个以上的同名方法只要它们的参数个数或者类型不同即可。在这种情况下该方法就叫被重载了这个过程称为方法的重载override 39、构造方法能不能重写能不能重载 可以重载但不能重写。 40、内部类与静态内部类的区别 静态内部类相对与外部类是独立存在的在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话必须要new一个外部类的对象使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法 普通内部类作为外部类一个成员而存在在普通内部类中可以直接访问外部类属性调用外部类的方法。 如果外部类要访问内部类的属性或者调用内部类的方法必须要创建一个内部类的对象使用该对象访问属性或者调用方法。 如果其他的类要访问普通内部类的属性或者调用普通内部类的方法必须要在外部类中创建一个普通内部类的对象作为一个属性外同类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性 如果其他的类要访问静态内部类的属性或者调用静态内部类的方法直接创建一个静态内部类对象即可。 41、Static关键字有什么作用 Static可以修饰内部类、方法、变量、代码块 Static修饰的类是静态内部类 Static修饰的方法是静态方法表示该方法属于当前类的而不属于某个对象的静态方法也不能被重写可以直接使用类名来调用。在 static方法中不能使用this或者super关键字。 Static修饰变量是静态变量或者叫类变量静态变量被所有实例所共享不会依赖于对象。静态变量在内存中只有一份拷贝在JVM加载类 的时候只为静态分配一次内存。 Static修饰的代码块叫静态代码块通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多 个如果有多个按照先后顺序依次执行。 42、final在java中的作用有哪些用法? final也是很多面试喜欢问的地方,但我觉得这个问题很无聊,通常能回答下以下5点就不错了: 1. 被fifinal修饰的类不可以被继承 2. 被fifinal修饰的方法不可以被重写 3. 被fifinal修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变. 4. 被fifinal修饰的方法,JVM会尝试将其内联,以提高运行效率 5. 被fifinal修饰的常量,在编译阶段会存入常量池中. 除此之外,编译器对fifinal域要遵守的两个重排序规则更好: 在构造函数内对一个fifinal域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序 初次读一个包含fifinal域的对象的引用,与随后初次读这个fifinal域,这两个操作之间不能重排序 43、StringString StringBuffffer 和 StringBuilder 的区别是什么 String是只读字符串它并不是基本数据类型而是一个对象。从底层源码来看是一个fifinal类型的字符 数组所引用的字符串不能被改变一经定义无法再增删改。每次对St 《一线大厂Java面试题解析后端开发学习笔记最新架构讲解视频实战项目源码讲义》 【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享 ring的操作都会生成新的 String对象 每次操作 隐式在堆上new了一个跟原字符串相同的StringBuilder对象再调用append方法 拼接后面的字符。 StringBuffer与StringBuilder都继承了AbstractStringBulder类而AbtractStringBuilder又实现了CharSequence接口两个类都是用来进 行字符串操作的。 在做字符串拼接修改删除替换时效率比string更高。 StringBuffer是线程安全的Stringbuilder是非线程安全的。所以Stringbuilder比stringbuffer效率更高StringBuffer的方法大多都加了 synchronized关键字 44、String str”aaa”,与String strnew String(“aaa”)一样吗 一共有两个引用三个对象。因为”aa”与”bb”都是常量常量的值不能改变当执行字符串拼接时候会创建一个新的常量是” aabbb”,有将 其存到常量池中。