一,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. logstash关于date时间处理的几种方式总结

    1.第一种,直接在配置文件中自定义时间格式 这是tomcat配置文件中的一段日志时间配置,按照这样的配置,那么输出的日志是这样子的: 然后你继续在logstash中这样子配置 此时logstash就不 ...

  2. 《Java大学教程》—第13章 程序包

    接下来,是第二学期的内容,也是相对深入的Java学习. 自测题:1.    在类的开发过程中,程序包的作用是什么?P321程序包是为了方便定位和部署类,还可以避免将来类之间出现名称冲突. 2.    ...

  3. FastJSON、Gson和Jackson性能对比

    Java处理JSON数据有三个比较流行的类库FastJSON.Gson和Jackson.本文将测试这三个类库在JSON序列化和反序列化的方面表现,主要测试JSON序列化和反序列化的速度.为了防止由于内 ...

  4. Java面试知识点之计算机网络篇(一)

    前言:在Java面试中,计算机网络的知识也是一项重点,因此笔者在此对计算机网络的相关知识进行总结. 1.OSI参考模型 自下而上:物理层(物理介质,比特流).数据链路层(网卡.交换机).网络层(IP协 ...

  5. 在Intellij IDEA下通过Hibernate逆向生成实体类

    前言:在IDEA中,通过相关插件,可以利用Hibernate逆向生成数据表对应的实体类.具体操作及注意事项见本篇随笔. 1.创建一个基于maven的hibernate工程.并在工程中添夹hiberna ...

  6. Flask路由报错:raise FormDataRoutingRedirect(request)

    raise FormDataRoutingRedirect(request)FormDataRoutingRedirect: A request was sent to this URL (http: ...

  7. 【转】深入理解Java:注解(Annotation)--注解处理器

    https://www.cnblogs.com/peida/archive/2013/04/26/3038503.html 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解 ...

  8. Intel发6款全新9代i9/i7/i5 CPU:巅峰8核

    在旧金山举办的GDC19活动中,Intel正式发布9代酷睿新品,面向移动平台的H系列标压处理器,定于今年第二季度上市. 换言之,最快4月份我们就能见到搭载后缀H的9代酷睿CPU笔记本(游戏本)等发售了 ...

  9. bootstraptable 分页查询

    1.前端配置 2.后台输出格式化数据 1.前端配置 @{ Layout = null; } <!DOCTYPE html> <html> <head> <me ...

  10. STM32中断优先级彻底讲解

    一.综述      STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢 ...