一,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. 如何写 go 代码 (How to Write Go Code 翻译)

    目录 1. 写在前面的话 2. 介绍 3. 代码组织 3.1. 工作区 3.2. GOPATH 环境变量 3.3. Package 路径 3.4. 第一个 GO 程序 3.5. 第一个 GO 库 3. ...

  2. hashcode相等两个类一定相等吗?equals呢?相反呢?

    hashCode相等,equals也不一定相等, 两个类也不一定相等 equals相同, 说明是同一个对象, 那么hashCode一定相同 哈希表是结合了直接寻址和链式寻址两种方式,所需要的就是将需要 ...

  3. Eric Chen Mock Interview

    Given an array with integers. Find two non-overlapping subarrays A and B, which |SUM(A) - SUM(B)| is ...

  4. 用static声明外部变量与内、外部函数

    1.用static声明外部变量 若希望某些外部变量只限于被本文件引用,而不能被其他文件引用,可以在定义外部变量时加一个static声明. 例:(file1.c) #include <stdafx ...

  5. node express 上传文件

    npm install --save multer var fs = require('fs'); var multer = require('multer'); var upload = multe ...

  6. (转)Spring Boot(十二):Spring Boot 如何测试打包部署

    http://www.ityouknow.com/springboot/2017/05/09/spring-boot-deploy.html 有很多网友会时不时的问我, Spring Boot 项目如 ...

  7. mysql 更新条件为查询出的结果

    UPDATE category c INNER JOIN ( SELECT b.category_id FROM category a, (SELECT * FROM category WHERE d ...

  8. 【转】CefSharp语言(Locales)本地化问题

    CefSharp默认是嵌入的chrome浏览器内核,默认英文,所以右键菜单以及一些功能都是英文显示. 国内用需要汉化.CefSharp本身支持本地化Locales,需要在初始化Browser的时候设置 ...

  9. 联想Y700安装显卡驱动和CUDA8.0

    一显卡驱动安装 1 安装驱动安装软件 2 自动检测下载对应版本驱动 3下载完成后,点击开始,解压出来临时安装文件 由于是临时安装文件,退出就会关闭 4所以在没有关闭情况下,打开重新打开一次setup, ...

  10. (七)JavaScript 函数

    带有返回值的函数 JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在函数运行以后被删除. 全局变量会在页面关闭后被删除.