java 面试什么是类_Java 面试题代码类收集
long temp=(int)3.9;
System.out.println(temp);
temp%=2;
System.out.println(temp);
3
1
View Code
Java里面類(lèi)的方法名可以與類(lèi)名一樣,與構(gòu)造函數(shù)的區(qū)別是方法有返回值,構(gòu)造函數(shù)沒(méi)有。
public classUserInfo {publicUserInfo(){
}publicString UserInfo(){return "adf";
}
}
這一點(diǎn)與net的不一樣。
攜程2015年面試題目:
/*** Created by qhong on 2017/2/5.*/
public classBase
{private String baseName = "base";publicBase()
{
callName();
}public voidcallName()
{
System. out. println(baseName);
}static class Sub extendsBase
{private String baseName = "sub";public voidcallName()
{
System. out. println (baseName) ;
}
}public static voidmain(String[] args)
{
Base b= newSub();
}
}
null
View Code
public classMain {public static voidmain(String[] args) {
Base b= newBase.Sub();
}
}classBase
{private String baseName = "base";publicBase()
{
System.out.println("fugou");
callName();
}public voidcallName()
{
System.out.println("fu");
System. out. println(baseName);
}static class Sub extendsBase
{private String baseName = "sub";public voidcallName()
{
System.out.println("zhi");
System. out. println (baseName) ;
}
}
}
View Code
fugou
zhinull
View Code
可以發(fā)現(xiàn),父類(lèi)在初始化的時(shí)候調(diào)用的callName是子類(lèi)的,這個(gè)時(shí)候子類(lèi)中的變量baseName只是被聲明,還未被賦值,所以輸出null。
構(gòu)造器的初始化順序大概是:父類(lèi)靜態(tài)塊 ->子類(lèi)靜態(tài)塊 ->父類(lèi)初始化語(yǔ)句 ->父類(lèi)構(gòu)造函器 ->子類(lèi)初始化語(yǔ)句-> 子類(lèi)構(gòu)造器
4.
public classNULL {public static voidhaha(){
System.out.println("haha");
}public static voidmain(String[] args) {
((NULL)null).haha();
}
}
輸出為haha,因?yàn)閚ull值可以強(qiáng)制轉(zhuǎn)換為任何java類(lèi)類(lèi)型,(String)null也是合法的。但null強(qiáng)制轉(zhuǎn)換后是無(wú)效對(duì)象,其返回值還是為null,而static方法的調(diào)用是和類(lèi)名綁定的,不借助對(duì)象進(jìn)行訪問(wèn)所以能正確輸出。
反過(guò)來(lái),沒(méi)有static修飾就只能用對(duì)象進(jìn)行訪問(wèn),使用null調(diào)用對(duì)象肯定會(huì)報(bào)空指針錯(cuò)了。這里和C++很類(lèi)似。
5.
public classMain {public static voidmain(String[] args) {newHelloB();
}
}classHelloA {publicHelloA() {
System.out.println("HelloA");
}
{ System.out.println("I'm A class"); }static { System.out.println("static A"); }
}class HelloB extendsHelloA {publicHelloB() {
System.out.println("HelloB");
}
{ System.out.println("I'm B class"); }static { System.out.println("static B"); }
}
staticAstaticB
I'm A class
HelloA
I'm B class
HelloB
View Code
這題很好,考查靜態(tài)語(yǔ)句塊、構(gòu)造語(yǔ)句塊(就是只有大括號(hào)的那塊)以及構(gòu)造函數(shù)的執(zhí)行順序。
對(duì)象的初始化順序:
(1)類(lèi)加載之后,按從上到下(從父類(lèi)到子類(lèi))執(zhí)行被static修飾的語(yǔ)句;
(2)當(dāng)static語(yǔ)句執(zhí)行完之后,再執(zhí)行main方法;
(3)如果有語(yǔ)句new了自身的對(duì)象,將從上到下執(zhí)行構(gòu)造代碼塊、構(gòu)造器(兩者可以說(shuō)綁定在一起)。
6.
public classMain {public static voidmain(String[] args) {
String s;
System.out.println("s=" +s);
}
}
開(kāi)始以為會(huì)輸出null什么的,運(yùn)行后才發(fā)現(xiàn)Java中所有定義的基本類(lèi)型或?qū)ο蠖急仨毘跏蓟拍茌敵鲋怠?/p>
7.
public classMain {public static voidmain(String[] args) {
Example ex= newExample();
ex.change(ex.str, ex.ch);
System.out.print(ex.str+ " and ");
System.out.print(ex.ch);
}
}classExample {
String str= new String("good");char[] ch = { 'a', 'b', 'c'};public void change(String str, charch[]) {
str= "test ok";
ch[0] = 'g';
}
}
good and gbc
View Code
值參數(shù)指的是實(shí)參的地址的拷貝,得到這個(gè)拷貝地址后,你可以通過(guò)它修改這個(gè)地址的內(nèi)容(引用不變),因?yàn)榇藭r(shí)這個(gè)內(nèi)容的地址和原地址是同一地址
8.
classPeople {
String name;publicPeople() {
System.out.print(1);
}publicPeople(String name) {
System.out.print(2);this.name =name;
}
}class Child extendsPeople {
People father;publicChild(String name) {
System.out.print(3);this.name =name;
father= new People(name + ":F");
}publicChild() {
System.out.print(4);
}
}
132
解析:考察的又是父類(lèi)與子類(lèi)的構(gòu)造函數(shù)調(diào)用次序。在Java中,子類(lèi)的構(gòu)造過(guò)程中必須調(diào)用其父類(lèi)的構(gòu)造函數(shù),是因?yàn)橛欣^承關(guān)系存在時(shí),子類(lèi)要把父類(lèi)的內(nèi)容繼承下來(lái)。但如果父類(lèi)有多個(gè)構(gòu)造函數(shù)時(shí),該如何選擇調(diào)用呢?
第一個(gè)規(guī)則:子類(lèi)的構(gòu)造過(guò)程中,必須調(diào)用其父類(lèi)的構(gòu)造方法。一個(gè)類(lèi),如果我們不寫(xiě)構(gòu)造方法,那么編譯器會(huì)幫我們加上一個(gè)默認(rèn)的構(gòu)造方法(就是沒(méi)有參數(shù)的構(gòu)造方法),但是如果你自己寫(xiě)了構(gòu)造方法,那么編譯器就不會(huì)給你添加了,所以有時(shí)候當(dāng)你new一個(gè)子類(lèi)對(duì)象的時(shí)候,肯定調(diào)用了子類(lèi)的構(gòu)造方法,但是如果在子類(lèi)構(gòu)造方法中我們并沒(méi)有顯示的調(diào)用基類(lèi)的構(gòu)造方法,如:super();??這樣就會(huì)調(diào)用父類(lèi)沒(méi)有參數(shù)的構(gòu)造方法。
第二個(gè)規(guī)則:如果子類(lèi)的構(gòu)造方法中既沒(méi)有顯示的調(diào)用基類(lèi)構(gòu)造方法,而基類(lèi)中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò),所以,通常我們需要顯示的:super(參數(shù)列表),來(lái)調(diào)用父類(lèi)有參數(shù)的構(gòu)造函數(shù),此時(shí)無(wú)參的構(gòu)造函數(shù)就不會(huì)被調(diào)用。
總之,一句話:子類(lèi)沒(méi)有顯示調(diào)用父類(lèi)構(gòu)造函數(shù),不管子類(lèi)構(gòu)造函數(shù)是否帶參數(shù)都默認(rèn)調(diào)用父類(lèi)無(wú)參的構(gòu)造函數(shù),若父類(lèi)沒(méi)有則編譯出錯(cuò)。
9.
classShape {publicString name;
}class Circle extends Shape implementsSerializable{private floatradius;transient intcolor;public static String type = "Circle";
}
在序列化一個(gè)Circle的對(duì)象circle到文件時(shí),下面哪個(gè)字段會(huì)被保存到文件中?
radius
因?yàn)楦割?lèi)Shape沒(méi)有繼承Serializable,所以name不能被序列化。
靜態(tài)類(lèi)不管是否有transient修飾,都不能序列化
===============================================
10.String,StringBuilder,StringBuffer
package com.qhong.basic;public classStringTest {public static voidmain(String[] args) {
String str1="hello";
String str2="he"+new String("llo");
System.err.println(str1==str2);//jvm對(duì)127及其以下的特殊處理
Integer i1=1;
Integer i2=1;
System.err.println(i1==i2);
Integer i3=128;
Integer i4=128;
System.err.println(i3==i4);
}
}
Output:
false
true
false
11.
總結(jié)
以上是生活随笔為你收集整理的java 面试什么是类_Java 面试题代码类收集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux汇编字符长怎么看,linux
- 下一篇: 4修改初始值_Java基础语法 --4(