• 基础学习--面向对象试题


    一、异常捕获

    package com.pb.demo.demo1;
    
    public class Demo {
    
        public static void main(String[] args) {
            
            try {
                func();
                System.out.println("A");
            } catch (Exception e) {
                //e.printStackTrace();
                System.out.println("C");
            }
            System.out.println("D");
        }
        
        /**
         * 抛出异常
         * @throws Exception
         */
        public static void func() throws Exception{
            try {
                throw new Exception();
            } finally {
                System.out.println("B");
            }
        }
    
    }

    结果:B,C,D

    二、对象的实例化过程

    package com.pb.demo.demo2;
    
    public class Test {
    
        public Test(){
            System.out.println("Test");
        }
        
    }
    package com.pb.demo.demo2;
    /**
     * 继承父类test
     * @author Administrator
     *
     */
    public class Demo extends Test {
        
        public Demo(){
            //这里隐藏了super()
            System.out.println("Demo");
        }
    
        public static void main(String[] args) {
            new Demo();
            new Test();
        }
    }

    结果:

    Test
    Demo
    Test

    三、接口

    package com.pb.demo.demo2;
    
    public interface A {
    
    }
    package com.pb.demo.demo2;
    
    
    
    public class B implements A {
        
      public String func(){
          return "func";
      }
      
      public static void main(String[] args) {
        A a=new B();
        a.func();   //编译失败,因为A接口中并没有这个方法
    }
    }

    四、方法重写

    package com.pb.demo.demo3;
    
    public class Fu {
    
        public boolean show(char a){
            System.out.println(a);
            return true;
        }
    }
    package com.pb.demo.demo3;
    
    public class Demo extends Fu {
    
        /**
         * 重写父类的方法
         * 调用时会调用子类重写后的方法
         */
        public boolean show(char a){
            System.out.println(a);
            return false;
        }
        public static void main(String[] args) {
            int i=0;
            Fu f=new Demo();
            Demo d=new Demo();
            for(f.show('A');f.show('B')&&(i<2);f.show('C')){
                i++;
                d.show('D');
            }
            //结果:A,B,
        }
    }

    结果;A,B

    五、接口

    package com.pb.demo.demo4;
    
    public interface A {
    
    }
    package com.pb.demo.demo4;
    
    public class B implements A {
    
        public String test(){
            return "yes";
        }
    }
    package com.pb.demo.demo4;
    
    public class Demo {
        static A get(){
            return new B();
        }
    
        public static void main(String[] args) {
            A a=Demo.get();
            System.out.println(a.test()); //编译失败 接口中没有这个方法,这个方法是子类中特有的
    
        }
    
    }

    六、对象初始化

    package com.pb.demo.demo5;
    
    public class Super {
        int i=0;
        public Super(String a){
            System.out.println("A");
            i=1;
        }
        public Super(){
            System.out.println("B");
            i+=2;
        }
    
    }
    package com.pb.demo.demo5;
    
    public class Demo extends Super {
    
        public Demo(String a){
            System.out.println("C");
            i=5;
        }
        public static void main(String[] args) {
            int i=4;
            Super d=new Demo("A");
            System.out.println(d.i);
        }
        //B,C,5
        
    }

    结果:B,C,5

    七、匿名内部类的使用

    package com.pb.demo.demo6;
    
    public interface Inter {
    
        public void show(int a,int b);
        public void func();
    }
    package com.pb.demo.demo6;
    
    public class Demo {
    
        public static void main(String[] args) {
            // 补足代码,调用两个函数,用匿名内部类实现
            Inter inter = new Inter() {
    
                @Override
                public void show(int a, int b) {
    
                }
    
                @Override
                public void func() {
    
                }
    
            };
            inter.show(3, 5);
            inter.func();
    
        }
    }

    八、

    package com.pb.demo.demo7;
    
    public class TD {
        int y = 6;
    
         class Inner {
            static final int y = 3;
            // 内部类中如果有static成员,这个内部类必须是static的,
    
            void show() {
                System.out.println(y); //只能调用局部中final修饰的
            }
        }
    }
    package com.pb.demo.demo7;
    
    public class TC {
    
        public static void main(String[] args) {
            TD.Inner ti=new TD().new Inner();
            ti.show(); //3
        }
    }

    非静态内部类,不能定义静态成员,

    内部类如果有静态成员,则这个内部类必须是静态内部类

    九、方法重写和方法重载

    public class Demo {
    
        int show(int a,int b){
            return 0;
        }
        
        
    }
    /**
         * 下列哪里方法可以存在Demo的子类中
         */
        public int show(int a,int b){
            return 0;
        }  //可以方法重写
        
       private int show(int a,int b){
            return 0;
        }  //权限不够
       private int show(int a,long b){
           return 0;
       }
       //可以,和父类不是同一个方法,方法重载
       public short show(int a,int b){
           return 0;
       }//不可以,不是方法重载,不可以和给定的函数出现在同一类中,或者其子类
       
       public static int show(int a,int b){
           return 0;
       }
       //不可以,静态方法,只能覆盖静态

    十、this,final

    this:代表本类对象,哪个对象调用this所有的函数,this就代表哪个对象

    final: 

    1.修饰类,变量(成员变量,静态变量,局部变量),函数

    2.修饰的类不可以被继承

    3.修饰的函数不可以被重写

    4.修饰的变量是一个常量,只能赋值一次

    5.内部类只能访问局部中的final变量

    十一、继承对象初始化

    package com.pb.demo.demo8;
    
    public class Fu {
    
        int num=4;
        void show(){
            System.out.println("show Fu");
        }
    }
    package com.pb.demo.demo8;
    
    public class Zi extends Fu {
        int num=5;
        void show(){
            System.out.println("show Zi");
        }
    
    }
    package com.pb.demo.demo8;
    
    public class T {
     public static void main(String[] args) {
        Fu f=new Zi();
        Zi z=new Zi();
        System.out.println(f.num);//4
        System.out.println(z.num);//5
        f.show(); //方法已经重写,执行子类的方法
        z.show();
    }
    }

    结果:

    4
    5
    show Zi
    show Zi

    十二、接口的实现

    package com.pb.demo.demo8;
    
    public interface A {
    
        void show();
    }
    package com.pb.demo.demo8;
    
    public interface B {
    
        
        void add(int a,int b);
    }
    package com.pb.demo.demo7;
    
    import com.pb.demo.demo8.A;
    import com.pb.demo.demo8.B;
    
    public class C implements A,B{
        
        private int x;
        private int y;
        // private int sum;
        @Override
        public void add(int a, int b) {
            this.x=a;
            this.y=b;
            
            //sum=a+b;
        }
    
        @Override
        public void show() {
            System.out.println(x+y);
            //System.out.println(sum);
            
        }
        public static void main(String[] args) {
            C c=new C();
            c.add(4, 2);
            c.show();//通过函数打印以上2个数的和
        }
    }

    十三、异常执行

    package com.pb.demo.demo8;
    
    public class Demo {
    
        public static void main(String[] args) {
             try {
                showExce();
                System.out.println("A");
            } catch (Exception e) {
                System.out.println("B");
            }finally{
                System.out.println("C");
            }
             System.out.println("D");
             //B,C,D
        }
        public static void showExce() throws Exception{
            throw new Exception();
        }
    }

    结果:B,C,D

     

    十四、继承,子类重写父类

    package com.pb.demo.demo8;
    
    public class Super {
    
        int i=0;
        Super(){
            
        };
        public Super(String s){
            i=1;
        }
        
    }
    package com.pb.demo.demo8;
    
    public class Demo1 extends Super {
    
        public Demo1(String s){
            i=2;
        }
        
        public static void main(String[] args) {
            Demo1 d=new Demo1("yes");
            System.out.println(d.i); //2
        }
    
    }

    结果:2

    十五、方法重写

    package com.pb.demo.demo9;
    
    public class Super {
    
        public int get(){
            return 4;
        }
    }
    package com.pb.demo.demo9;
    
    public class Demo1 extends Super {
    
    
        
        public long get(){ //方法重写不能改变返回值类型和参数
            return 4;
        }
        public static void main(String[] args) {
            Super s=new Demo1();
            System.out.println(s.get());
        }
    
    }

    结果:编译失败:方法重写不能改变方法的返回值 和参数

    十六、异常

    package com.day10.demo2;
    
    public class Demo {
    
        public static void main(String[] args) {
            try {
                 func();
            } catch (Exception e) {
                System.out.println("C");
                
            }
            System.out.println("D");
            
        }
        public static void func(){
            try {
                throw new Exception();
                System.out.println("A");//抛出异常下方代码不会被执行
            } catch (Exception e) {
                System.out.println("B");
                
            }
        }
    
    }

    结果:throw下方的代码不能被执行到

    删除后,执行结果:B,D

    十七、匿名内部类

    package com.day10.demo2;
    
    public class Demo1 {
        
        public void func(){
            //位置1:
            
        }
        
    
        public static void main(String[] args) {
            Demo d=new Demo();
            //位置2
            
        }
        /**
         * A、在位置1写new Inner(); //OK
         * B、在位置2写new Inner(); //主函数是静态的,如果要访问,需要被静态包修
         * C、在位置2写new d.Inner();//格式错误 new new Demo1().Inner();
         * D、在位置2写new Demo.Inner(); //错误因为inner不是静态的
         */
    
    }

    结果

    十八、多重catch顺序

    package com.day10.demo2;
    
    public class Exc0 extends Exception {
    
    }
    package com.day10.demo2;
    
    public class Demo2 {
    
        public static void main(String[] args) {
            try {
                throw new Exc1();
            } catch (Exception e) {
                System.out.println("Exception");
                /*
                 * Exception是最大的异常父类,
                 * 在最前面的后,下面的catch永远不会被执行到
                 */
            }catch (Exc0 e) {
                System.out.println("Exc0");
            }
        }
    
    }

    结果:在最前面的后,下面的catch永远不会被执行到,父类的catch要放在最下面

    十九、静态调用非静态,匿名内部类实现

    package com.day10.demo2;
    
    public interface Test {
    
        
        public void func();
    }
    package com.day10.demo2;
    
    public class Demo3 {
    
    
        public  void show(Test t){
            t.func();
        }
        public static void main(String[] args) {
            //补足代码:匿名内部类
            new Demo3().show(new Test(){
                @Override
                public void func() {
                    
                }
                
            });
            
        }
    }

    二十、异常带return

    package com.day10.demo3;
    
    public class Test {
    
        public static String output="";
        public static void foo(int i){
            try {
                if(i==1)
                    throw new Exception();        
                output+="1";
            } catch (Exception e) {
                output+="2";
                return;
            }finally{
                output+="3";
                
            }
            output+="4";
        }
        
        public static void main(String[] args) {
            
            foo(0);
            System.out.println(output);//1,3,4
            foo(1);
            System.out.println(output); //134,2,3
        }
    
    }

    结果

    二十一、补全代码对象数组求最大值

    package com.day10.demo3;
    
    public class Circle {
    
        private static double pi=3.14;
        private double radius;//半径
        public Circle(double r){
            this.radius=r;
        }
        public static double compare(Circle[] cir){
            //程序代码,就是求数组中的最大值
            int max=0;
            for(int x=1;x<cir.length;x++){
                if(cir[x].getRadius()>cir[max].radius){
                    max=x;
                }            
            }
            return cir[max].getRadius();
            
        }
        public double getRadius() {
            return radius;
        }
        public void setRadius(double radius) {
            this.radius = radius;
        }
    
    }
    package com.day10.demo3;
    
    public class TC {
    
        public static void main(String[] args) {
            
            Circle cir[] =new Circle[3];//创建了个类类型的数组
            cir[0]=new Circle(2.0);
            cir[1]=new Circle(3.0);
            cir[2]=new Circle(5.0);
            System.out.println("最大半径值是:"+Circle.compare(cir));
        }
    
    }

    二十二、方法调用

    package com.day10.demo3;
    
    public class Demo {
        private static int j = 0;
    
        private static boolean methodB(int k) {
            j += k;
            return true;
        }
    
        public static void methodA(int i) {
            boolean b;
            b = i < 10 | methodB(4);
            b = i < 10 ||methodB(8);
        }
    
        public static void main(String[] args) {
            methodA(0);
            System.out.println(j);
    
        }
    
    }

    结果:4

    二十三、对象中值的比较

    package com.day10.demo4;
    
    public class Circle {
    
        private double radius;
        public Circle(double r){
            this.radius=r;
        }
        public Circle compare(Circle cir){
            //补足代码
            if (this.radius>cir.getRadius()){
                return this;
            }else{
                return cir;
            }
            //return (this.radius>cir.getRadius()?this:cir);
        }
        public double getRadius() {
            return radius;
        }
        public void setRadius(double radius) {
            this.radius = radius;
        }
        
    }
    package com.day10.demo4;
    
    public class TC {
    
        public static void main(String[] args) {
            Circle cir1=new Circle(1.0);
            Circle cir2=new Circle(2.0);
            Circle cir;
            cir=cir1.compare(cir2);
            if(cir1==cir){
                System.out.println("圆1的半径比较大");
            }else{
                System.out.println("圆2的半径比较大");
            }
    
        }
    
    }

     

     

  • 相关阅读:
    cloud-init 手动调试及问题解决
    深入理解openstack网络架构(四)
    深入理解openstack网络架构(三)
    深入理解openstack网络架构(二)
    深入理解openstack网络架构(一)
    ovs总结与常用命令
    如何debug cloud-init
    nova snapshot
    Openstack并行性能加速
    Nova 是如何统计 OpenStack 计算资源
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4805374.html
Copyright © 2020-2023  润新知