美文网首页Android面试准备(遥远的憧憬未来)
Android/Java/移动端(图形图像)/跨平台(RN、Fl

Android/Java/移动端(图形图像)/跨平台(RN、Fl

作者: MonkeyLei | 来源:发表于2020-02-01 17:15 被阅读0次

目录:

A. Java基础相关-1-字符串、类、泛型、==、equals等

B. TODO

2018年算是互联网的寒冬,一大波公司宣扬裁员,也确实裁掉了一部分,我慌了。像我们这种水平,半灌水响叮当,补Android也一年多了,耍耍哒哒的混了两年,哎!管它寒冬还是肺炎,都加油吧,坚持,过了这个风波,要好好锻炼,保持活力轻松的愉快的精神工作,学习,娱乐,生活。 我们自己也是要加油,逐渐反复重温加深Java基础知识,然后进阶深度,更重要的是要结合实践联系,联想项目反复加深。后期搞点开源实践项目来瞅瞅!!!

下面根据一些Java面试题(摘自网友的2019的总结篇一,后续也是会从各种面试题去实践验证),然后觉得一些较为难得不常见得,能够提升逼格的一些,其实还是有用的哟,你看那些框架,源码,很多用法你估计没看过吧。。。😳......

1. Java基础之 - == 、equals

HelloEquals.java

  package com.test.me;

/**
 * 字符整数等的比较  == 、equals
 * @author hl
 *
 */
public class HelloEquals {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Integer a = 127;
        Integer b = 127;
        Integer c = 129;
        Integer d = 12;
        // 最好用equals用来做值的比较
        System.out.println("a=b ? " + (a == b));  // -128 - 127之内部的数据,采用的是原生数据类型int值的比较
        System.out.println("a.equals(b) ? " + (a.equals(b)));
        System.out.println("c=d ? " + (c == d)); // -128 - 127之外的数据是地址的比较
        System.out.println("c.equals(d) ? " + (c.equals(d))); //内部是值得比较

        // 字符串做值的比较更是要用equals
        String e = "abc";
        String f = e.substring(0, e.length() - 1) + "c"; // 一系列操作之后,将会产生新的字符串对象
        String g = "abc"; // 同一个常量字符串,引用地址相同,值也相同
        System.out.println("e=f ? " + (e == f)); 
        System.out.println("e.equals(f) ? " + (e.equals(f))); 
        System.out.println("e=g ? " + (e == g));
        System.out.println("e.equals(g) ? " + (e.equals(g))); 

        // Integer的equals实现, String的要相对复杂些,是循环字符的比较
        //       /**
        //       * Compares this object to the specified object.  The result is
        //       * {@code true} if and only if the argument is not
        //       * {@code null} and is an {@code Integer} object that
        //       * contains the same {@code int} value as this object.
        //       *
        //       * @param   obj   the object to compare with.
        //       * @return  {@code true} if the objects are the same;
        //       *          {@code false} otherwise.
        //       */
        //      public boolean equals(Object obj) {
        //          if (obj instanceof Integer) {
        //              return value == ((Integer)obj).intValue();
        //          }
        //          return false;
        //      }

        ///< 结果
        //              a=b ? true
        //              a.equals(b) ? true
        //              c=d ? false
        //              c.equals(d) ? false
        //              e=f ? false
        //              e.equals(f) ? true
        //              e=g ? true
        //              e.equals(g) ? true

        // 后续就需要关注jvm堆栈等知识了
    }

}

**2. **Java基础之 - 字符串相关

   package com.test.me;

/**
 * 字符串相关
 * @author hl
 *
 */
public class HelloStringType {
    public static void main(String[] args) {
        // System.identityHashCode能打印真实内存地址,而hashcode可以重写,所以不一定代表内存地址
        String a = "abc";
        System.out.println(System.identityHashCode(a));
        a += "d";
        System.out.println(System.identityHashCode(a));

        StringBuffer sb  = new StringBuffer("ff");
        System.out.println(System.identityHashCode(sb));
        sb = sb.append("d");
        System.out.println(System.identityHashCode(sb));

        // 这里简单验证下String每次操作都会产生新的内存,效率低,浪费内存;建议采用StringBuffer
        // StringBuffer线程安全,StringBuilder线程不安全
    }
}

3. Java基础之 - 类相关

package com.test.me;

/**
 * 类相关
 * @author hl
 *
 */
public class HelloClass {
    static int a = 2;
    int c = 3;

    /**
     * 静态内部类
     * @des 外部类的非静态成员变量不能直接访问
     */
    static class Sb{
        void ff(){
            System.out.println(a);
            //System.out.println(c); // 外部类的非静态成员变量不能直接访问
        }
    }

    /**
     * 非静态内部类
     * @des 非静态内部类不能定义静态方法或者静态成员变量
     */
    class Sb2{
        int g = 2;
        //static int w = 2;
        void gg() {
            // 局部内部类
            class Gha{
                int hhah = 2;
            }
            Gha a = new Gha();
        }
        //      /**
        //       * 非静态内部类不能定义静态方法或者静态成员变量
        //       */
        //      static void ww() {
        //          
        //      }
    }

    /**
     * 匿名内部类可以采用接口的方式创建并返回,另外也可以有匿名子类(创建父类,重写父类的方法)
     * @des I think. 对独立性比较强的方法,而且单一特别的处理可以考虑采用这种方式,没有必要单独提出来做一个方法实现
     * @return
     */
    public InnerInterface test2()
    {
        return new InnerInterface() {
            String a;
            @Override
            public void printA() {
                System.out.println(a);
            }
        };
    }

    static class Parent{
        public static void testa() {
            System.out.println("父亲");
        }
    }

    static class Child extends Parent{
        public static void testa() {
            System.out.println("孩纸");
        }
    }

    public static void main(String[] args) {
        // 接口不能直接创建对象,可以以匿名对象的方式创建!
        // 接口内部可以定义非私有变量和静态变量
        InnerInterface intf = new InnerInterface() {

            @Override
            public void printA() {
                // TODO Auto-generated method stub

            }

        };
        // 成员变量的默认修饰符为:public static final
        System.out.println("a=" + InnerInterface.a);
        System.out.println("b=" + InnerInterface.b);

        // 子类可以继承父类的静态成员和方法,但是不能重写。看如下示例...
        Child child = new Child();
        Parent parnet = child; // 此时会隐形转换为父类对象,只会拥有父类的属性和方法;对象还是一个对象,对象地址没有变化

        child.testa();
        parnet.testa();

        System.out.println(System.identityHashCode(child));
        System.out.println(System.identityHashCode(parnet));

        //      结果:
        //          a=2
        //          b=2
        //          孩纸
        //          父亲
        //          366712642
        //          366712642

    }

}

InnerInterface.java

package com.test.me;

public interface InnerInterface {
    // 成员变量的默认修饰符为:public static final
    // 所以下面两种都是一样的效果
    int a = 2;
    static int b = 2;

    void printA();

}

**4. **Java基础之 - 泛型类型 - 困扰多年的Java泛型 extends T> super T>,终于搞清楚了!

HelloGeneric.java

 package com.test.me;

/**
 * 泛相关 - extends 、 super
 * @extends 上下界、像list就很有参考和学习价值
 * @author Administrator
 *
 */
class HelloGeneric{

    /**
     * 泛型类型
     * @des 可以利用extends、super来限定上下界
     * @author hl
     *
     * @param <T>
     */
    public class Generic<T> {
         private T item;

         public Generic(T t) {
             this.item = t;
         }

         public T get() {
             return item;
         }

         public void set(T item) {
             this.item = item;
         }   
    }

    class Gradpa{
        Gradpa(){
            //System.out.println("爷爷!");
        }
        public void sayNo() {
            System.out.println("sayNo  Gradpa!");
        }
    }

    class Father extends Gradpa{
        Father(){
            //System.out.println("父亲!");
        }
        public void sayNo() {
            System.out.println("sayNo  Father!");
        }
    }
    class Child extends Father{
        Child(){
            //System.out.println("孩纸!");
        }
        public void sayNo() {
            System.out.println("sayNo纸!");
        }
    }

    private void CloseSb() {
        // https://my.oschina.net/u/3990817/blog/3055968

        // ? extends Father使得我们可以装入Child类型,否则无法直接转化
        Generic<? extends Father> hgr = new Generic<Child>(new Child());
        Father fa = hgr.get();
        System.out.println(fa);
        Child cld = (Child) hgr.get();
        cld.sayNo();
        // 不能存,只能取
        //hgr.set(new Child());

        // super就限定了只能是Father类以及父类
        // 不影响往里存,但往外取只能放在Object对象里,也可以强转滴
        Generic<? super Father> hgrsf = new Generic<Father>(new Father());
        Generic<? super Father> hgrs = new Generic<Gradpa>(new Gradpa());
        //HelloGeneric<? super Father> hgrsc = new HelloGeneric<Child>(new Child());
        System.out.println(hgrsf);
        System.out.println(hgrs);

        Gradpa fr = (Gradpa) hgrsf.get();
        fr.sayNo();
        hgrsf.set(new Father());
        fr = (Gradpa) hgrsf.get();

        Gradpa gp = (Gradpa) hgrs.get();
        gp.sayNo();
        hgrs.set(new Father());
        gp = (Gradpa) hgrs.get();

    }

    public static void main(String[] args) {
        new HelloGeneric().CloseSb();
    }
}

不知不觉,以及五点多了。。。休息哈。。过两天要上班了。。。疫情严重,改为在家办公。。。腰疼,缺乏坐姿和锻炼。。。😳😳😳😳😳😳😳

希望疫情赶快过去,大家都相安无事!自己也加油准备。。。多刷题。。。Leecode也打算连续不间断开始了....

相关文章

网友评论

    本文标题:Android/Java/移动端(图形图像)/跨平台(RN、Fl

    本文链接:https://www.haomeiwen.com/subject/njsxxhtx.html