一,final
1.被final修饰的类不可以被继承
2.被final修饰的方法不可以被重写
3.被final修饰的变量不可以被改变
  重点就是第三句。被final修饰的变量不可以被改变,什么不可以被改变呢,是变量的引用?还是变量里面的内容?还是两者都不可以被改变?

public class User {

    private String name;

    public User(String name) {
this.name = name;
}
public String getName() {return name;} public void setName(String name) {this.name = name;} public static void main(String[] args) {
final User user=new User("张三");
user.setName("李四");
System.out.println(user.getName());//运行没问题,输出:李四
}
}
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {return name;} public void setName(String name) {this.name = name;} public static void main(String[] args) {
final User user=new User("张三");
final User user2=new User("李四");
user=user2;//编译都通不过,Error:(21, 9) java: cannot assign a value to final variable user
}
}
可见,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的

总结:
被final修饰的变量,不管变量是在是哪种变量,切记不可变的是变量的引用而非引用指向对象的内容。
被final修饰的常量,在编译阶段会存入调用类的常量池中

二,static
1.静态变量和静态方法
static关键字最基本的用法:
(1).被static修饰的变量属于类变量,可以通过类名.变量名直接引用,不需要new出一个类
(2).被static修饰的方法属于类方法,可以通过类名.方法名直接引用,不需要new出一个类
被static修饰的变量和方法统一属于类的静态资源,是类实例之间共享的,即一处变,处处变。
2.问题:为什么jdk把不同的静态资源放在不同的类中,而不把所有静态资源放在一个类中?
(1).不同类有自己的静态资源,可以实现静态资源分类。参见:Utils包下的工具类
(2).避免重名。放在不同类中可以有重名静态变量和静态方法
(3).避免静态资源类无限增长
说了这么多就是为了分类
3.静态资源和非静态资源之间的引用问题
静态资源是类初始化时加载的,非静态资源是类new的时候加载的。类的初始化早于类的new
所以:
静态方法不可以引用非静态资源
静态方法可以引用静态资源
非静态方法可以引用静态资源
4.静态块
静态块里面的代码只执行一次,且只在初始化类的时候执行
结论:
(1).静态资源的加载顺序是严格按照静态资源的定义顺序来加载的
(2).定义在静态代码块之后的静态变量,可以赋值,但不能访问
static{
       c = 3;//没有定义就可以赋值
       System.out.println(c);//报错,不能访问
      }
      private static int c;
(3).静态代码块是严格按照父类静态代码块--->子类静态代码块的顺序加载的,且只加载一次

三,java对象表示方式1:序列化Serizaliable和transient
平时java内存中的对象,是无法进行IO操作或网络通信的,因为进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,所以必须将对象以某种方式表示出来,即4存储对象中的状态。java对象的表示有很多样式,java本身也提供了用户一种表示对象的方式,那就是序列化。即序列化只是表示对象的一种方式
序列化:将一个对象转换成一串二进制表示的字节数组,通过保存或转移这些字节数据达到持久化的目的
反序列化:将字节数组重新构造成对象

四,java对象表示方式2:XStream实现对对象的XML化
1.对象的表示有各种各样的方式,序列化只是其中的一种而已。还可以将数据json化,xml化。(google的protobuf在redis序列化中用到了)
2.利用XStream表示一个对象
XStream就是一种java对象和xml之间相互转换的工具。XStream中的核心类就是XStream类。(需要导入jar包)
java代码:
XStream xs = new XStream();//XStream对象
XmlObject xo = new XmlObject(10, 10.5, "110");//java对象
String str = xs.toXML(xo);

java对象用Xml方式的表示方式:
<com.xrq.test.XmlObject>
  <count>10</count>
  <price>10.5</price>
  <phone>110</phone>
</com.xrq.test.XmlObject>
3.Xml转换成java对象
XStream xs = new XStream();
String xmlStr = "<com.xrq.test.XmlObject><count>10</count><price>10.5</price><phone>110</phone></com.xrq.test.XmlObject>";
XmlObject xo = (XmlObject)xs.fromXML(xmlStr);

五,接口和抽象类
1.接口interface的作用
(1).接口是对于行为的抽象。从设计的角度来说,接口的存在可以帮助理清楚业务,利用接口可以告诉开发人员需要实现哪些业务,并且也将命名规范限制住了
(2).弥补了Java类单继承的不足,一个类可以实现多个接口。同时接口也可以多继承
(3).降低了代码的耦合性。由于java多态的特性,接口的引用可以接受子类的对象,用实现的子类实例化声明的接口后,就可通过接口调用子类重写的方法。即调用接口的地方和实现接口的地方法无关。(想想平时的接口的调用)
2.抽象类和接口区别
(1).接口是对动作的抽象,表示的是这个对象能做什么,如人可以吃东西,猫也可以吃东西,只要有相同的行为。
    抽象类是对根源的抽象,表示的是这个对象是什么,如猫是动物,狗也是动物
(2).可以实现多个接口,只能继承一个抽象类
(3).接口中只能定义抽象方法 public abstract void add(); 注意方法不能用private修饰,通常public abstatic省略
    抽象类中可以有普通方法   
(4).接口中只能有静态的不能被改变的数据成员  
    抽象类可以普通的数据成员

Java面试题详解二:java中的关键字的更多相关文章

  1. Twitter算法面试题详解(Java实现)

    最近在网上看到一道Twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案.先看一下题目. 图1 先看看图图1.可以将方块看做砖 ...

  2. Java io流详解二

    原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...

  3. 【转】Twitter算法面试题详解(Java实现)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://androidguy.blog.51cto.com/974126/1319659 ...

  4. 整理最全的Android开发工程师面试题,面试题详解。java、Android程序员

    1.    请描述下Activity的生命周期. 必调用的三个方法:onCreate()--> onStart() --> onResume(),用AAA表示 (1)父Activity启动 ...

  5. [转载] java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger

    转载自http://janeky.iteye.com/blog/770393 ------------------------------------------------------------- ...

  6. Java面试题详解四:==和equals的去别

    一,功能 1.对于== 作用于基本数据类型的变量,比较的存储的值是否相等, 作用于引用类型的变量,比较的是其所指向的对象的地址是否相同(即是否是同一个对象) 2.对于equals Object的equ ...

  7. Java面试题详解一:面向对象三大特性

    一,多态:1.面向对象四大基本特性:抽象,封装,继承,多态抽象,封装,继承是多态的基础.多态是抽象,封装,继承的表现.2.什么是多态不同类的对象对同一消息作出不同的响应叫做多态3.多态的作用简单来说: ...

  8. Java面试题详解三:比较器

    一,Comparable和Comparator1.Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较.Comparable接口中只有一 ...

  9. Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control) 可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”.在Spring中,通过IOC可以将实现类.参数信息等配置在其对应的配置文件中,那么当 需要更 ...

随机推荐

  1. IPerf——网络测试工具介绍与源码解析(4)

    上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...

  2. Ecto 总结

    ecto 简介 ecto 相当于 elixir 的 ORM,但是得益于 elixir 语言,和传统的 ORM 相比,更加简洁和强大. ecto 主要分为 4 部分: Repo: 这是和真正数据库交互的 ...

  3. css点滴3—5种方式实现圆环

    使用css实现圆环,最简单的方式就是使用嵌套标签,设置border-radius就可以实现,但是这个是最简单的方式,这篇文章我们介绍5种方式实现圆环. 1.两个标签嵌套 html代码: <div ...

  4. MacBook Pro维修过程

    上个月买了2016款无touchbar的MacBook Pro,这款的键盘跟15年版本的很不一样. 在用了三周左右,就发现有个键按着不灵活了,像是进了水一样,黏住感觉,必须要大力按才会出来.思来想去, ...

  5. Python中可变和不可变类型

    可变类型 列表,字典,集合 不可变类型 数字,字符串,元组 这里的可变不可变,是指内存中的那块内容(value)是否可以被改变 不可变类型 数字 a = 1 b = 1 print(id(a), id ...

  6. python数据类型练习题

    一.元素分类 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中.即: { ...

  7. TCP长连接保持连接状态

    对于TCP长连接保活是十分必要的,原因如下: 1.系统多在OA网和外网间有防火墙隔离,很多防火墙对一段时间内没有报文活动的socket会自动关闭. 2.对于非正常断开的连接系统并不能侦测到,比如防火墙 ...

  8. Apache Spark技术实战之6 --Standalone部署模式下的临时文件清理

    问题导读 1.在Standalone部署模式下,Spark运行过程中会创建哪些临时性目录及文件? 2.在Standalone部署模式下分为几种模式? 3.在client模式和cluster模式下有什么 ...

  9. 「AHOI / HNOI2017」影魔

    「AHOI / HNOI2017」影魔 题目描述 解决这类比较复杂的区间贡献问题关键在于找到计算的对象. 比如这道题,我们计算的对象就是区间中间的最大值. 对于点\(i\),我们找到左边第一个比他大的 ...

  10. WPFのDecorator 、Adorner和AdornerDecorator

    Decorator 和 Adorner 它们都有“装饰品”的意思. Decorator类负责包装某个UI元素,以提供额外的行为.它有一个类型为UIElement的Child属性,其中含有待包装的内容. ...