`
喻红叶
  • 浏览: 41079 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论
文章列表
问: int i = 0; i = ++i;i的值是多少?毫无疑问,i = 1;但是,i = ++i;这条语句对i进行了两次赋值:第一次,i自增,此时i=1;第二次,将++i的表达式的值(也就是1)赋给i。我们通过字节码来分析一下这段代码的执行过程: //int i = 0;的字节码 0:iconst_0 //将int型0推送至栈顶 1:istore_1 //将栈顶值(0)存入局部变量表中索引为1的地方(也就是i) // i = ++i;的字节码 2:innc 1,1 //在局部变量表中索引为1的变量加1,此时i=1; 3:iload_1 //索引为1的变量值存入栈顶 4:ist ...
Java定时器Timer其实是一个线程类,TimerTask则实现了Runnable接口,TimerTask的类是这样定义的:abstract class TimerTask extends Object implements Runnable,其中的run()方法并未实现。关于这两个类的语法细节,看API足够了解。 我们都知道Timer可以以固定的频率来执行某一定时任务,比如每天凌晨2:00执行数据库的统计操作。但是怎样实现以不同的频率执行任务呢?比如以2s,3s,2s,3s...的频率来执行任务呢? TimerTask的任务是在其run()方法中被执行的,这个是Timer自动调用Time ...
Java定时器Timer其实是一个线程类,TimerTask则实现了Runnable接口,TimerTask的类是这样定义的:abstract class TimerTask extends Object implements Runnable,其中的run()方法并未实现。关于这两个类的语法细节,看API足够了解。 我们都知道Timer可以以固定的频率来执行某一定时任务,比如每天凌晨2:00执行数据库的统计操作。但是怎样实现以不同的频率执行任务呢?比如以2s,3s,2s,3s...的频率来执行任务呢? TimerTask的任务是在其run()方法中被执行的,这个是Timer自动调用Time ...
Adapter Pattern:把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式很像变压器(Adapter),变压器把一种电压转换成另一种电压。美国的生活电压是110V,中国的生活电是220V,如果把美国的电器放到中国使用,则必须要有一个能把220V的电压转成110V的变压器。同时,适配器模式的做法也很像货物的包装过程:被包装的货物的真实样子被包装所掩盖和修改,因此也有人把这种模式叫做包装(Wrapper)模式。 适配器有两种形式,类的适配器模式和对象的适配器模式。分写来介绍一下。 类的适配器模式 类的适配器模式把 ...
借用一个小例子来分析Java程序的初始化过程,其中涉及类的加载,初始化顺序 class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = printInt("static Insect.x1 initialized"); static int printInt(String s) { ...

Java中final的用法

    博客分类:
  • java
在Java中,final可以修饰类,方法,属性。 一 final数据 final关键字修饰变量,用来向编译期告知这块数据恒定不变: 1.一个永不改变的编译期常量:在Java中这类常量必须是基本类型,编译期可以将该常量代入到可能用到它的表达式中,也就是说,可以在编译期执行计算; private final int valueOne = 1; public static final int VALUE_TWO = 2;   2.一个运行期时被初始化的值,一旦初始化完成,将不再改变。 private final Random
在Java中,final可以修饰类,方法,属性。 一 final数据 final关键字修饰变量,用来向编译期告知这块数据恒定不变: 1.一个永不改变的编译期常量:在Java中这类常量必须是基本类型,编译期可以将该常量代入到可能用到它的表达式中,也就是说,可以在编译期执行计算; private final int valueOne = 1; public static final int VALUE_TWO = 2; 2.一个运行期时被初始化的值,一旦初始化完成,将不再改变。 private final Random rand = new Random(100); pri ...
借用一个小例子来分析Java程序的初始化过程,其中涉及类的加载,初始化顺序 class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = printInt("static Insect.x1 initialized"); static int printInt(S ...
     我想我们不应该在安装软件上面耽误太多时间,但是很多时候,我们去被安装挡在了门外,尤其是初次在Linux下。作为一个程序猿,最近决定转战linux,MySQL是必须要有的,讲一下我的安装过程。在Ubuntu下安装MySQL有一个非常简单的方法,直接使用命令: sudo apt-get install mysql-client mysql-server;       我用的是Ubuntu12.04,使用命令安装的是5.5,感觉心里总是不爽,卸载之,安装5.6。我是参考MySQL5.6-manual英文版进行安装。首先下载.deb格式的,安装,失败;接着下载了一个rpm格式的,安装 ...
      通过一个小例子还模拟Spring的执行过程,由于还没有接触过Spring,所以仅仅是模拟,不敢说是原理,也仅仅是供自己理解。这是第一版,等接触过Spring之后,会对这篇文章进行修改,我还会回来的! 一 添加用户     ...

Java反射机制

    博客分类:
  • java
很早就听说了大名鼎鼎的反射机制,最近终于把它学了,总结一下Java反射机制的学习。   1.获得Class类。在JVM中,加载一个类的时候,会在堆中生成该类对应的Class类,通过Class类可以获得该类的所有属性和方法,Class类就像镜子一样反射着该类的所有内容。所以,在使用Java反射机制的时候,第一步就是获得该类的Class类(Class类位于java.lang包下面),获得Class类有以下几种方法: 1)Class.forName(类的全限定名);如:Class<?> clazz = Class.forName("java.lang.String&quo ...
一 静态代理模式 在静态代理模式中有三类角色,理解了这三类角色也就理解了代理模式: a.抽象对象:定义了真实角色和抽象角色的公共接口(可以是类,也可以是接口)Subject; b.代理角色:代理角色内部包含有对真实角色的引用,通过这个引用去执行真实角色想要完成的任务;除此之外,代理角色可以完成其他的一些功能; c.真实角色:实际要完成任务的角色,是我们始终要引用的对象。 代理角色和真实角色均实现了(或继承了)抽象角色。 写一段代码来举例:   //抽象角色,定义公共部分 interface Subject { public void request(); } ...

java初始化

    博客分类:
  • java
[size=xx-large][size=x-large][size=large][size=medium]关于java初始化的内容,今天总结如下: 一 类的加载过程 假设程序里面定义了一个类Person 1.在首次创建这个类的对象,或者调用了这个类的静态变量或静态方法,java虚拟机把这个类加载到内存中(即使构造方法没有显示的声明为static,但它确实是static); 2.加载类的时候,静态变量会初始化。 3.当创建了Person的对象时,会在堆里面分配一块内存,用来保存这个对象; 4.在使用这块内存之前,会对这个内存进行清空,这样在显示的赋值之前,虚拟机给所有的变量都初始化了一个默认值, ...
Global site tag (gtag.js) - Google Analytics