Java 常用概念详解和实例:final,enum,static class

1:==,hashCode() 和 equals()有什么区别
经典回答:http://www.cnblogs.com/skywang12345/p/3324958.html
1.1 equal 与==
==表示地址相等。java是极少数"==“不是数值比较的语言.
1) equal与==相同; 2)  通常class 会重写equal,这时equal是value比较,不是地址比较。
1.2 equal 与hashCode.
比较有个前提,必须是hashSet,hashMap等有hashCode的东东,两者才有比较意义.
senario1:没有重写hashCode,即使equal value相同,hashCode也不等。
senario2:重写hashCode,  
比较p1和p2,它们的hashCode()相等,通过equals()比较它们也返回true。所以,p1和p2被视为相等。
比较p1和p4,虽然它们的hashCode()相等;但是,通过equals()比较它们返回false。所以,p1和p4被视为不相等。

2 enum 可以看成class . 同时还能将string转成enum
搜索的网页,大部分是string to enum的。
toString和valueOf是一样,valueOf不能重写,重写toString等于重写valueOf。

package enumtest;
public class testtostring {
        public enum Color {
            RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
            // 成员变量
            private String name;
            private int index;

            // 构造方法
            private Color(String name, int index) {
                this.name = name;
                this.index = index;
            }

            // 覆盖方法
//            @Override
//            public String toString() {
//                return this.index + "_" + this.name;
//            }
        }

        public static void main(String[] args) {
            System.out.println(Color.RED.toString());
            //将string "GREEN" 转成 Color.GREEN对象.
            Color lt = (Color) Enum.valueOf(Color.class, "GREEN");
            //default call toString()
            System.out.println(lt);
        }
}

运行结果:

comment out toString:
result:
RED
GREEN

with toString:
result:
1_红色
2_绿色

3 how to init final vars 

except init vars declearation, and we can init them in all constructors for final vars

public static class FileSaveResult {
        private final String contentType;
        private final String name;
        private final File file;
        private final String errMsg;

        public FileSaveResult(){
            this.contentType = "";
            this.name = "";
            this.file = null;
            this.errMsg = "";
        }

        public FileSaveResult(String contentType, String name, File file) {
            this.contentType = contentType;
            this.name = name;
            this.file = file;
            this.errMsg = "";
        }

        public FileSaveResult(String errMsg) {
            this.contentType = "";
            this.name = "";
            this.file = null;
            this.errMsg = errMsg;
        }

.......

 }

4 static 内部类适用外部类访问内部类,但是内部类不访问外部类。  
静态内部类可以访问外部类所有的静态变量和方法,即使是private的也一样。
static 内部类应用场景
Java集合类HashMap内部就有一个静态内部类Entry。Entry是HashMap存放元素的抽象,HashMap内部维护Entry数组用了存放元素,但是Entry对使用者是透明的。像这种和外部类关系密切的,且不依赖外部类实例的,都可以使用静态内部类。
本项目中static内部类:util 公用的地方。而且符合上述条件,所以用static

static 变量不能放到函数中定义,因为class 函数都是属于对象的,每个对象有一份。而static是属于class的。
static编译就存在,函数运行才存在.
class static多个对象share ---对象:成员变量多个thread share----thread私有函数的局部变量.

5 java 抽象类和接口
前提:什么是抽象方法?和c++的纯虚函数一样,只有函数声明,没有实现的方法.
抽象类包含:抽象方法+普通方法;接口所有方法全是抽象方法.
抽象类和接口都不能new,只能继承。
参数:https://www.cnblogs.com/taoxiaoyao/p/11980377.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值