java 面试什么是类_Java 面试题代码类收集
long temp=(int)3.9;
System.out.println(temp);
temp%=2;
System.out.println(temp);
3
1
View Code
Java里面類的方法名可以與類名一樣,與構造函數的區別是方法有返回值,構造函數沒有。
public classUserInfo {publicUserInfo(){
}publicString UserInfo(){return "adf";
}
}
這一點與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
可以發現,父類在初始化的時候調用的callName是子類的,這個時候子類中的變量baseName只是被聲明,還未被賦值,所以輸出null。
構造器的初始化順序大概是:父類靜態塊 ->子類靜態塊 ->父類初始化語句 ->父類構造函器 ->子類初始化語句-> 子類構造器
4.
public classNULL {public static voidhaha(){
System.out.println("haha");
}public static voidmain(String[] args) {
((NULL)null).haha();
}
}
輸出為haha,因為null值可以強制轉換為任何java類類型,(String)null也是合法的。但null強制轉換后是無效對象,其返回值還是為null,而static方法的調用是和類名綁定的,不借助對象進行訪問所以能正確輸出。
反過來,沒有static修飾就只能用對象進行訪問,使用null調用對象肯定會報空指針錯了。這里和C++很類似。
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
這題很好,考查靜態語句塊、構造語句塊(就是只有大括號的那塊)以及構造函數的執行順序。
對象的初始化順序:
(1)類加載之后,按從上到下(從父類到子類)執行被static修飾的語句;
(2)當static語句執行完之后,再執行main方法;
(3)如果有語句new了自身的對象,將從上到下執行構造代碼塊、構造器(兩者可以說綁定在一起)。
6.
public classMain {public static voidmain(String[] args) {
String s;
System.out.println("s=" +s);
}
}
開始以為會輸出null什么的,運行后才發現Java中所有定義的基本類型或對象都必須初始化才能輸出值。
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
值參數指的是實參的地址的拷貝,得到這個拷貝地址后,你可以通過它修改這個地址的內容(引用不變),因為此時這個內容的地址和原地址是同一地址
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
解析:考察的又是父類與子類的構造函數調用次序。在Java中,子類的構造過程中必須調用其父類的構造函數,是因為有繼承關系存在時,子類要把父類的內容繼承下來。但如果父類有多個構造函數時,該如何選擇調用呢?
第一個規則:子類的構造過程中,必須調用其父類的構造方法。一個類,如果我們不寫構造方法,那么編譯器會幫我們加上一個默認的構造方法(就是沒有參數的構造方法),但是如果你自己寫了構造方法,那么編譯器就不會給你添加了,所以有時候當你new一個子類對象的時候,肯定調用了子類的構造方法,但是如果在子類構造方法中我們并沒有顯示的調用基類的構造方法,如:super();??這樣就會調用父類沒有參數的構造方法。
第二個規則:如果子類的構造方法中既沒有顯示的調用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯,所以,通常我們需要顯示的:super(參數列表),來調用父類有參數的構造函數,此時無參的構造函數就不會被調用。
總之,一句話:子類沒有顯示調用父類構造函數,不管子類構造函數是否帶參數都默認調用父類無參的構造函數,若父類沒有則編譯出錯。
9.
classShape {publicString name;
}class Circle extends Shape implementsSerializable{private floatradius;transient intcolor;public static String type = "Circle";
}
在序列化一個Circle的對象circle到文件時,下面哪個字段會被保存到文件中?
radius
因為父類Shape沒有繼承Serializable,所以name不能被序列化。
靜態類不管是否有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對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.
總結
以上是生活随笔為你收集整理的java 面试什么是类_Java 面试题代码类收集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux汇编字符长怎么看,linux
- 下一篇: 4修改初始值_Java基础语法 --4(