继上次李大明白约小馨吃饭逛公园后觉得可能没希望了。因为跟小馨聊天她也不怎么回复了。
但是周末前一天,小馨给李大明白发消息,说是上次李大明白请她吃饭,这次请李大明白看个电影吧。
李大明白很郁闷,什么情况?又有戏了?
第二天李大明白早上起来,收拾了一下,就去赴约了。
但是李大明白是个学技术的人,他还是延续了他一贯的直男性格,对话如下:
李:我以为你觉得咱俩不合适呢。
小馨:没有呀,我感觉你为人处事还是挺不错的。
李:哈哈,我发消息你不回,我以为意思就是不合适
小馨:不对哇,我消息应该是都回了的,只是有时候看到消息比较晚,第二天才回复你的。
我觉得回复消息是一个最起码的做人的品质。除非你明确告诉别人不要再给你发消息了。
李:哦,对,你是回复晚了,不是没回复。
小馨:这几天比较忙,所以平时不注意看手机。
李:哦啊,原来如此。
小馨:第一次见完面我确实觉得咋俩不合适,当时回家后想直接跟你说,因为你老是给我说一些我不懂的东西。
不过我表姐(介绍人)跟我说,愿意跟你分享他专业知识的人能有什么坏心眼呢。
我觉得她说得很对。
李:哈哈,果然人又不是被final修饰的,会随着别人的建议和自己的思考而改变自己的想法。
小馨:什么,罚闹? 闹事受处罚了吗?
李:不是,这是我们Java语言的一个关键字
final 关键字代表最终的、不可改变的。
小馨:哦哦
李:final 一般有四种用法
李:
修饰类的话,那这个类就很悲惨了,不能被继承 。我们常见的以下类
java.lang.String
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
java.lang.Character
java.lang.Class
java.lang.Compiler
有人戏称final 修饰的类为太监类 ,是因为被final 修饰的类不能被继承
我们可以试试
那这里就有人想问了,不能继承,我想跟他产生联系怎么办,那你们就拜把子吧(组合模式)
final修饰的方法不能被重写,那我们就称之为太监方法 吧
验证一下:
有人就问了,那他多孤独,是的,只有不想被重写的方法才会用final修饰。有一点我们一定要记住,因为不能重写,所以我们是不能吧abstract final 一起使用
但是这种方法是可以重载的
比如:
修饰成员变量很委屈,好好的你为啥给我加final,因为有些变量,定义好之后就不想被别人修改了,比如:我们常见到的:
private static final long serialVersionUID = -6849794470754667710L;
比如:
看到了没,这些变量,定义好了,是没有修改的必要的,比如int的最大值,最小值,是不能改的了。
但是还是要注意,final修饰的成员变量是不能被修改的,所以初始化的时候必须赋值,不能后期赋值。
初始化赋值包括:直接赋值、构造函数赋值、动态语句块、static修饰的静态语句块赋值
看一下不赋值会不会报错:
我们用以下几种方式赋值都可以的:
/*** @author 公众号:木子的昼夜编程*/
public class Test {final String aa = "哈哈";
}/*** @author 公众号:木子的昼夜编程*/
public class Test {final String aa;{aa = "呵呵";}
}/*** @author 公众号:木子的昼夜编程*/
public class Test {final String aa;public Test(){aa = "嘿嘿";}
}/*** @author 公众号:木子的昼夜编程*/
public class Test {final static String aa;static {aa = "静态语句块";}
}
注意:有两句话
对于基本类型来说,不可变说的是变量当中的数据不可改变
对于引用类型来说,不可变说的是变量当中的地址值不可改变。
package base;/*** @author 公众号:木子的昼夜编程*/
public class Test {final int i = 1;final Person p = new Person();public static void main(String[] args) {Test test = new Test();// 可以修改 不报错test.p.name = "可以修改";// 不可以修改 会报错test.i = 100;// 不可以修改 会报错test.p = new Person();}
}class Person{String name;
}
局部变量被final修饰了,与成员变量差不多,都是不可以修改的。
我们一般不用final修饰局部变量,除非必须,比如我们用Lambda的时候
我们用了lambbda使用外部局部变量,一般需要声明成final类型的 因为这玩意存在线程不安全。最好这样。
package base;/*** @author 公众号:木子的昼夜编程*/
public class Test {public static void main(String[] args) {final int i = 1;Runnable r = () -> System.out.println(i);}
}
李:不好意思 又说跑题了
小馨:没事, 要检票了,我们检票去吧。
李:好的
刷新闻看到一句话,觉得很有道理,发出来大家共勉:
人生的路极其珍贵,又非常短暂。我们不甘让人生索然无味,才更应该大胆些。
关注公众号:木子的昼夜编程