当前位置:首页 > 开发 > 编程语言 > Java > 正文

JAVA基础

发表于: 2012-10-07   作者:灵静志远   来源:转载   浏览:
摘要: 一、类的初始化顺序 1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器 同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。 二、String 1 String a = "abc"; JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。

二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根据String类的equals(Object obj)方法的返回值来判断。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。

2 String a = "ab" + "cd";
常量值在编译期就被确定。上面代码等同于:String a = "abcd";只创建了一个对象。

3 String a = new String("abc")
JAVA虚拟机在堆中创建一个String对象,它的值(value)是在栈(字符串池)中创建的对象("abc"),所以,创建了两个对象。

三、属性覆盖
1、private修饰的变量不能被覆盖。

2、属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义变量的类型。(这点后面代码说明)

3、default,protected和public修饰符并不影响属性的覆盖。

4、静态变量和静态常量属于类,不属于对象,因此它们不能被覆盖。

5、常量可以被覆盖。

6、对于基本类型和对象,它们使用同样的覆盖规律。

四、final,finally和finalize的区别
1、final
(1)修饰变量:变量只能被赋值一次,变量可以在初始化块和构造器中初始化,不可以在静态代码块中初始化。static final修饰的变量可以在静态代码块中初始化,不可以在初始化快和构造器中初始化。
(2)修饰方法:方法不能被子类覆盖,但不影响被子类继承。
(3)修饰类:不允许被继承,类中所有方法不能被重写,但并不代表类中的属性值不能被改变。

2、finally用在try/catch语句中,并且附带着一个语句块,表示这段代码最终总是被执行。如果try语句块中有return、continue和break,则finally语句块是在这三个语句之前被执行。

3、finalize是一个方法,属于java.lang.Object类。是GC(garbage collector)运行机制的一部分,所有类都有这个方法。Object的任意子类都可以重写该方法,在其中释放系统资源或者做其他的清理工作,入关闭输入输出流。该方法在GC清理它所从属的对象是被调用,若果执行过程中抛出了无法捕获的异常(uncaught exception),GC将终止对该对象的清理,并且该异常会被忽略,直到下一次GC清理这个对象时,finalize方法被再次调用。
System.gc()如同Runtime.getRuntime().gc(),只是建议GC启动,但是GC启动并不一定,这取决于JAVA虚拟机。直到虚拟机停止运行,可能有些对象的finalize方法没被运行过。只有通过调用System类的另一个方法:
        runFinalizersOnExit(boolean value)才能保证对象的finalize方法在虚拟机停止运行前一定运行过。但该方法是不安全的,可能会造成finalize方法被误调用。

五、日期时间
1 DateFormat.parse(String source) String --> Date
2 DateFormat.format(Date date) Date --> String

六、switch
1 long,float,double,boolean,所有类型的对象(包括String类,排除byte,char,short,int四种基本类型对应的包装类)不能用于switch括号里表达式

七、位运算
1 移位运算符可用于byte,short,int,long,char,但不能用于float,double;

2 byte,short,char在移位前被自动转换为int,结果也为int。
1 << 35 = 1 << (35%32) = 1 << 3 = 8
100 >> 35 = 100 >> (35%32) = 100 >> 3 = 12

3 左移(<<)一位相当于 *2 ,有符号右移(>>) 相当于 /2 。

八、创建的方式
1 new
2 调用Class类的newInstance()方法,利用反射机制创建对象。


代码说明:
三、属性覆盖
2、
package test;

class ParentClass {
private String privateField = "Parent_private";
String frieddlyField = "Parent_friendly";
protected String protectedField = "Parent_protected";
public String publicField = "Parent_public";

public String getPrivateField() {
return this.privateField;
}
}

class SubClass extends ParentClass {
private String privateField = "Sub_private";
String frieddlyField = "Sub_friendly";
protected String protectedField = "Sub_protected";
public String publicField = "Sub_public";

public String getPrivateField() {
return this.privateField;
}
}

public class OverrideTest {
public static void main(String[] args) {
ParentClass subClass = new SubClass();

System.out.println(subClass.getPrivateField());
System.out.println(subClass.frieddlyField);
System.out.println(subClass.protectedField);
System.out.println(subClass.publicField);
}
}

运行结果:

Sub_private
Parent_friendly
Parent_protected
Parent_public

JAVA基础

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1、类的初始化顺序 (父类--静态变量 或 父类--静态初始化块 )->(子类--静态变量 或 子类--静
对JVM的理解 (转) 文章分类:Java编程 JVM(Java Virtual Machine):Java虚拟机,就是构建在操作
平时都是依赖eclipse等IDE,反而忘了手工编译Java文件,记录下。 记事本编写HelloWorld.java文件:
Java特点 简单 面向对象 与平台无关 解释型 多线程 安全 动态 分布式 垃圾自动回收 数据类型 JAVA是
堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间。
项目之间再看看java基础。 今天下午收到了think in java fourth edition,1500页的英文,是个挑战。
1. Collection Framework A Collection是一组对象的集合,A collections framework 是一个表现和操
一 4类8种基本数据类型 逻辑型 - boolean 文本型 - char 整数型 - byte short int long 浮点数型 -
Java 基础 1. equals() and hasCode() (1). If two objects are equal, then they must have the sa
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号