java面向对象代码题_JAVA SE面向对象编程(含java练习题)

注:截图和题目多来自李刚老师的《疯狂Java讲义》,少部分为自己的理解,添加的相关说明和题目

一 类及其成员定义

[修饰符] class类名

{

零个到多个构造器定义...

零个到多个成员变量...

零个到多个方法

}

修饰符可以是public、final、abstract,也可以省略。其中final和abstract只能出现一个。

2.定义成员变量

[修饰符] 类型 成员变量名 [=默认值];

修饰符可以省略,也可以是public、private、protected、static、final,其中public、private、protected三个最多只能出现一个,可以与static、final组合起来修饰成员变量

3.定义方法

[修饰符] 方法返回值类型 方法名(形参列表)

{//方法体

}

修饰符可以省略,也可以是public、private、protected、static、final、abstract,其中public、private、protected三个最多只能出现一个;abstract和final,abstract和static不能同时使用,final和static可以同时使用。

4.构造器

[修饰符] 构造器名(形参列表)

{//构造器执行体

}

修饰符可以省略,也可以使public、private、protected其中之一。

5.初始化代码块

38958d4da483a1422ed8271eab32573b.png

6.this的使用

this总是指向调用该方法的对象(实际中的类型对象)或正在初始化的对象。

出现位置:

a.构造器第一行(标识正在初始化的对象)

b.方法中

调用另一个方法(和没有this效果一样)

this.成员变量(防止被形参或者局部变量替换)

方法中,默认(隐藏的)第一个参数为this,this可以在任何位置赋值给该类型对象

7.方法的参数传递机制是值传递

classDataWrap

{inta;intb;

}public classReferenceTransferTest

{public static voidswap(DataWrap dw)

{

int tmp =dw.a;

dw.a =dw.b;

dw.b =tmp;

System.out.println("swap方法里,a成员变量的值是"

+ dw.a + ";b成员变量的值是" +dw.b);

dw = null;

}public static voidmain(String[] args)

{

DataWrap dw= newDataWrap();

dw.a= 6;

dw.b= 9;

swap(dw);

System.out.println("交换结束后,a成员变量的值是"

+ dw.a + ";b成员变量的值是" +dw.b);

}

}

8c998b82a7e72beb0357b89e706b6bb1.png

8.形参个数可变的方法

方法中最多只能有一个个数可变的形参,且位置只能出现在形参列表最后。

9.形参个数可变的方法的重载

public classOverloadVarargs

{public voidtest(String msg)

{

System.out.println("只有一个字符串参数的test方法 ");

}//因为前面已经有了一个test()方法,test()方法里有一个字符串参数。//此处的个数可变形参里不包含一个字符串参数的形式

public voidtest(String... books)

{

System.out.println("****形参个数可变的test方法****");

}public static voidmain(String[] args)

{

OverloadVarargs olv= newOverloadVarargs();//下面两次调用将执行第二个test()方法

olv.test();

olv.test("aa" , "bb");//下面将执行第一个test()方法

olv.test("aa");//下面调用将执行第二个test()方法

olv.test(new String[]{"aa"});

}

}

10.用递归写出文件遍历

11.方法重载

注意两同一不同(同一个类中方法名相同,参数列表不同)

12 父子类可以有方法的重载

13 方法重载是一种静态行为,是一种动态分派(理解这一点,可以参考例题中的体现)

12 注意,实例可以访问类,但是类不能访问实例

14.所有变量及初始化

eb961a8ac712f63b740d94fff9a357aa.png

实体变量和类变量都会自动初始值,但方法局部变量和代码块局部变量不会自动初始化,未初始化使用报错。

public classBlockTest

{public static voidmain(String[] args)

{

{//定义一个代码块局部变量a

inta;//下面代码将出现错误,因为a变量还未初始化

System.out.println("代码块局部变量a的值:" +a);

}

}

}

15 数据在内存中的存储

b1eaf9cff2fc38f9f17416de1ce089f9.png

c90335b5f0ad5aa4fc973570e67f83b1.png

8ff6f2663a3161c4892692d6f788cb54.png

16 访问控制符

141a4683aa65f2ae27d76a74d16a017a.png

17 是不是调用构造器就会创建一个对象

b43204788ad7da1daac09c6565cad03b.png

18 java子类不能获得父类的构造器

19 方法重写(两同两小一大)

da5df1f25d147fa51bd3720aa9b81404.png

20 static方法中不会有this和supper

21 若父类和子类中有相同的成员变量,内存图示

e8a65432b4c37fd4cb506976d1e1d313.png

101602d5a6beacf8582fbab7a45e0934.png

969bcad78fda15ad3c0034b4f59740ef.png

22 多态

classBaseClass

{public int book = 6;public voidbase()

{

System.out.println("父类的普通方法");

}public voidtest()

{

System.out.println("父类的被覆盖的方法");

}

}public class SubClass extendsBaseClass

{//重新定义一个book实例变量隐藏父类的book实例变量

public String book = "轻量级Java EE企业应用实战";public voidtest()

{

System.out.println("子类的覆盖父类的方法");

}public voidsub()

{

System.out.println("子类的普通方法");

}public static voidmain(String[] args)

{//下面编译时类型和运行时类型完全一样,因此不存在多态

BaseClass bc = newBaseClass();//输出 6

System.out.println(bc.book);//下面两次调用将执行BaseClass的方法

bc.base();

bc.test();//下面编译时类型和运行时类型完全一样,因此不存在多态

SubClass sc = newSubClass();//输出"轻量级Java EE企业应用实战"

System.out.println(sc.book);//下面调用将执行从父类继承到的base()方法

sc.base();//下面调用将执行从当前类的test()方法

sc.test();//下面编译时类型和运行时类型不一样,多态发生

BaseClass ploymophicBc = newSubClass();//输出6 —— 表明访问的是父类对象的实例变量

System.out.println(ploymophicBc.book);//下面调用将执行从父类继承到的base()方法

ploymophicBc.base();//下面调用将执行从当前类的test()方法

ploymophicBc.test();//因为ploymophicBc的编译类型是BaseClass,//BaseClass类没有提供sub方法,所以下面代码编译时会出现错误。//ploymophicBc.sub();

}

}

23 instanceof

12dddcffeceb76f33cd068b9ce3f26f9.png

public classInstanceofTest

{public static voidmain(String[] args)

{//声明hello时使用Object类,则hello的编译类型是Object,//Object是所有类的父类, 但hello变量的实际类型是String

Object hello = "Hello";//String与Object类存在继承关系,可以进行instanceof运算。返回true。

System.out.println("字符串是否是Object类的实例:"

+ (hello instanceofObject));

System.out.println("字符串是否是String类的实例:"

+ (hello instanceof String)); //返回true。//Math与Object类存在继承关系,可以进行instanceof运算。返回false。

System.out.println("字符串是否是Math类的实例:"

+ (hello instanceofMath));//String实现了Comparable接口,所以返回true。

System.out.println("字符串是否是Comparable接口的实例:"

+ (hello instanceofComparable));

String a= "Hello";// //String类与Math类没有继承关系,所以下面代码编译无法通过//System.out.println("字符串是否是Math类的实例:"//+ (a instanceof Math));

}

}

24 将类设置成最终类的方法

a.final

b.所有方法都改成private

题目

1.写出下面执行结果的输出

classCreature

{publicCreature()

{

System.out.println("Creature无参数的构造器");

}

}class Animal extendsCreature

{publicAnimal(String name)

{

System.out.println("Animal带一个参数的构造器,"

+ "该动物的name为" +name);

}public Animal(String name , intage)

{//使用this调用同一个重载的构造器

this(name);

System.out.println("Animal带两个参数的构造器,"

+ "其age为" +age);

}

}public class Wolf extendsAnimal

{publicWolf()

{//显式调用父类有两个参数的构造器

super("灰太狼", 3);

System.out.println("Wolf无参数的构造器");

}public static voidmain(String[] args)

{newWolf();

}

}

2.解释下面程序为什么会报错

classBase

{publicBase()

{

test();

}public void test() //①号test()方法

{

System.out.println("将被子类重写的方法");

}

}public class Sub extendsBase

{privateString name;public void test() //②号test()方法

{

System.out.println("子类重写父类的方法,"

+ "其name字符串长度" +name.length());

}public static voidmain(String[] args)

{//下面代码会引发空指针异常

Sub s = newSub();

}

}

3.下面方法体现了方法重载是一种静态行为,请写出运行结果(自拟题目)

public classOverloadMethod {public static voidmain(String[] args) {

Animal animal= newAnimal();

Animal dog= newDog();

Animal tiger= newTiger();

AnimalRun(animal);

AnimalRun(dog);

AnimalRun(tiger);

}public static voidAnimalRun(Animal animal){

System.out.println("A");

}public voidAnimalRun(Dog dog){

System.out.println("A");

}public voidAnimalRun(Tiger tiger){

System.out.println("A");

}

}classAnimal{

}class Dog extendsAnimal{

}class Tiger extendsAnimal{

}

4.下面方法体现了方法重载是一种静态行为,并体现了多态的特征,请写出运行结果(自拟题目)

public classOverloadMethod {public static voidmain(String[] args) {

Animal animal= newAnimal();

Animal dog= newDog();

Animal tiger= newTiger();

AnimalRun(animal);

AnimalRun(dog);

AnimalRun(tiger);

}public static voidAnimalRun(Animal animal){

System.out.println("A");

animal.run();

}public voidAnimalRun(Dog dog){

System.out.println("A");

dog.run();

}public voidAnimalRun(Tiger tiger){

System.out.println("A");

tiger.run();

}

}classAnimal{public voidrun(){

System.out.println("Animal run");

}

}class Dog extendsAnimal{

@Overridepublic voidrun() {

System.out.println("Dog run");

}

}class Tiger extendsAnimal{

@Overridepublic voidrun() {

System.out.println("Tiger run");

}

}

5.判断下面程序会不会报错

public classStaticTest {private static final StaticTest instance = newStaticTest();privateStaticTest(){}public static voida(){

System.out.println("a");

instance.b();

}public voidb(){

System.out.println("b");

}public static voidmain(String[] args) {

StaticTest.a();

}

}

6.写出下面执行结果的输出

public classNullAccessStatic {private static voidtest()

{

System.out.println("static修饰的类方法");

}private voidrun(){

System.out.println("运行实例方法");

}public static voidmain(String[] args)

{

NullAccessStatic nas= null;

nas.test();

nas.run();

}

}

答案

1.

1901c86f19bc1c6acfd0d83233227a0c.png

2.

9d883d859d9baa07dca9f480557b1804.png

3.

13c0047e60d4ecc8e75183a9d5ac4298.png

4.

ab1a6ea52da74166f4569a4d22dea5f4.png

5不会

6.static修饰的类方法                     报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值