zoukankan      html  css  js  c++  java
  • java面试题,题目1代码块,静态代码块;题目2括号匹配算法

    题目1.写出下面代码运行的结果

    class Animal {
        public Animal() {  System.out.println("Animal构造");  }
        
        {  System.out.println("Animal代码块");  }
        
        static{  System.out.println("Animal静态代码块");  }
    }
    
    class Tiger extends Animal{
        public Tiger() {  System.out.println("Tiger构造");  }
        
        {  System.out.println("Tiger代码块");  }
        
        static{  System.out.println("Tiger静态代码块");  }
        
    }
    class Test{
        public static void main(String[] args) {
            new Tiger();
        }
    }

    答案:

    Animal静态代码块
    Tiger静态代码块
    Animal代码块
    Animal构造
    Tiger代码块
    Tiger构造

    结论:1.静态代码块优先级最高,直接从父类初始化到子类

       2.代码块和构造方法都属于对象,同样先初始化父级,

       3.代码块的优先级高于构造方法。

       4.顺序:   父类静态代码->子类静态代码->父类代码块->父类构造->子类代码块->子类构造

    题目2.写一个静态方法来判断一个字符串中的括号是否匹配。给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效

    例如:

    String str1 = "[(])";                           false
    String str2 = "(])";                            false
    String str3 = "([[]()])";                      true
    String str4 = "([{}])";                       true

    分析:

    1.首先因想到需要把字符串中的每一个括号都取出来判断一下。

    2.然后我们怎么来匹配括号呢?

    3.因为左括号和右括号必须成对出现。使用栈方便逻辑编写

    算法思路:

    1.左括号全部入栈

    2.判断是否有左括号,没有直接返回false

    3.遇到左括号进行全部压栈

    4.如果遇到右括号则出栈,然后进行判断,不符合则返回

    其中两种特殊情况。

    (1)循环时,如果栈为空,则说明右括号比左括号多,返回false
    (2)循环结束时,如果栈非空,则说明左括号比右括号多,返回false

    答案:

    public static void main(String[] args) {
            String str1 = "[(])";
            String str2 = "(])";
            String str3 = "([[]()])";
            String str4 = "([{}])";
            System.out.println(isValid(str1));
            System.out.println(isValid(str2));
            System.out.println(isValid(str3));
            System.out.println(isValid(str4));
        }
        public static boolean isValid(String str) {
            Stack stack = new Stack();                            //使用栈集合
            for(int i=0;i<str.length();i++) {                    //遍历字符串每一位
                if (str.charAt(i)=='['||str.charAt(i)=='('||str.charAt(i)=='{') {
                    stack.push(str.charAt(i));            //判断如果时左括号类型就加入栈集合
                }else {                        //否则右括号就比对
                    //如果栈里没有左括号了,但是字符串中还存在右括号,即不匹配直接返回false
                    if (stack.isEmpty()) {  
                        return false;
                    }
                    //如果是']'类型的右括号,就出栈一个比对是不是'['如果不是返回false
                    if (str.charAt(i)==']'&&(char)stack.pop()!='[') {
                        return false;
                    }
                    //如果是'}'类型的右括号,就出栈一个比对是不是'{'如果不是返回false
                    if (str.charAt(i)=='}'&&(char)stack.pop()!='{') {
                        return false;
                    }
                    //如果是')'类型的右括号,就出栈一个比对是不是'('如果不是返回false
                    if (str.charAt(i)==')'&&(char)stack.pop()!='(') {
                        return false;
                    }
                }//else结束
            }//for循环结束
            return stack.isEmpty();//如果for循环结束了,栈中还有左括号就返回false,如果已经空了就返回true
        }
  • 相关阅读:
    Java基础(十四)——API(Calendar类、System类、StringBuilder类、包装类)
    异常
    Java基础(十三)——权限修饰符和内部类
    知识点总结
    Java基础(十二)— —多态
    Java基础(十一)— —继承、抽象类和接口
    java基础(十)——继承
    小程序外部向组件内部传递externalClasses -- 传入样式wxss
    小程序组件交互 -- 传入js
    promise封装小程序的请求类(request,清爽易懂)
  • 原文地址:https://www.cnblogs.com/bigfire/p/10441892.html
Copyright © 2011-2022 走看看