Java笔记2–故事汇

2016年1月20日

14:49

java储存数据的空间:

    寄存器(registers):读取速度最快的地方,位于处理器内部。

    栈(stack):位于RAM(random-access memory 随机访问内存)

    堆(heap):位于RAM,对象存储的位置。    

    静态存储空间:静态属性的数据

    常量存储空间:常量数据

 

this的故事:

    this相当于是一个对自己的引用,当该类的第一个对象在被创建后,this便会指向这个对象,于是当该类还没有创建对象之前我们不能去调用this,所以在静态的方法中不能出现this。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.firefly.javatest.pojo;
 
public class Student {
    public int id;
    public String name;
    public Student(String name) {
        super();
        this.name = name;
    }
 
    public Student(int id) {
        super();
        this.id = id;
    }
 
    public Student(int id,String name){
        this(name);//必须写在第一行,不然会报错
        //this(id);不能调用两次构造函数
        this.id=id;
    }
 
    void print(String name){
        //this(name);也不能在非构造函数的地方调用
    }
}

以上展示this调用构造函数的实例:

    1.必须在构造函数的第一行用this调用别的构造函数

    2.同一个构造函数里不能用this掉用别的构造函数两次,基于第一点衍生出来的

    3.不能在非构造函数中用this调用构造函数

 

equals的故事:

     equals在用于比较包装类的类型时,是去比较其内部存储的值,但是当它用于比较,普通的类的时候只是比较对象引用指向的地址是否相同,没有什么意义,与“==”是一样的。

 

java只会为成员变量赋初值,但是如果是局部变量,java是不会管它的,所以在方法里面定义的变量必须要为它赋值。

 

package的命名规则:所有字母小写,包括首字母和中间单词的首字母。

 

finall的故事:

         1.final类:final类不能被继承,因此会产生很多美丽的故事,诸如它的方法不可能被覆盖,即它的方法都默认为fianl类型,它不会有子类,会相对独立。什么时候我们会想要去用到final修饰方法呢,当你确定你写的这个类不需要扩展,写完就完了,更是不想被人修改。

         2.final方法:

                使用原因:第一、把方法锁定,防止任何继承类修改它的意义和实现。

                   第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

        3.final变量( 常量):

                final修饰的变量一经赋值便不会改变,也就是常量了,java允许我们先定义一个final常量并且不立即赋值,这叫做final空白,但你得记住,你必须要在构造函数中为你所有的final空白赋初值。因为编译器必须确保它在使用前被初始化。这种机制允许你有多个构造函数,也就是说你能为不同的对象给予常量以不同的值。

 

        4.fianl参数:当参数为final修饰时,你无法再去改变这个参数的值。

 

static 的故事:

        将数据或者方法独立于对象之外,使其变成一个所有人都可以使用的公共属性的东西。与面向对象的想法是相违背的。

 

方法的重写(overriding)和重载(overloading)

        重写是重写了父类的方法,参数和返回值都要相同,会覆盖父类的方法。

        重载是一个类中出现方法名相同的方法。

 

接口的故事:

            接口是一个存粹的抽象类。实现多继承。

            继承实现多个类向上转型为一个父类型,而接口实现一个类向上转型为多个接口。

            接口和抽象类的选用:当你没有要求该类一定要对堆中数据进行操作是就可以用接口,有一个准则为优先使用接口。

                                               接口中不用对数据进行操作,所以不用对堆进行操作。 

            接口中的成员变量会自动成为public static final类型。

 

常量在java中用大写字母表示,中间用下划线隔开。

 

???内隐类(inner class)将一个类的定义置于另一个类中。

将一个字符串的首字母转       换为大写的代码: str.replaceFirst(str.substring(0, 1),str.substring(0, 1).toUpperCase()) ;//str是我们要的字符串

instanceof 是java中的一个保留字,用于检测一个对象是不是由某个类来创建的