Java便利贴3

看下面的类:

class Cat (
    int id;
    String name;
    static int sid;   

    Cat (String name)
    {
         this.name = name;         id = sid++;
    }

    public static void main (String[] args)
    {
         Cat.sid = 100;
         Cat mimi = new Cat("mimi");
         Cat pipi = new Cat("pipi");
    }
}

内存的分配情况如下:

1、main方法中第一行 Cat.sid = 100

因为sid是静态变量,无论Cat类是否创建了对象,创建了几个对象,都只是在Data segment(数据区)分配一块内存,类型是int,名字叫sid,值为100.

2、第二行new了一个Cat对象,首先会在栈中分配一块内存,放局部变量mimi,然后在堆中构建一个Cat对象,里面有id和name属性。

String其实是个类,“mimi”是字符串常量,会在Data segment中分配一块内存,所以name属性是"mimi"的引用。

3、第三行再构建一个Cat对象pipi,同理,只不过此时sid变成102。

最后的内存分配如下图:

时间: 2024-11-06 18:53:03

Java便利贴3的相关文章

Java便利贴7

Java中异常的分类: Java中异常的祖宗类是Throwable,下面又分了Error和Exception两个子类,Error是无法处理的异常,Exception是可以处理的异常,又细分了很多子类. 注:其中Runtime Exception是可以处理,也可以不处理的异常类,其他的子类是必须处理的异常.

Java便利贴8

Java中,如果父类的方法抛出了异常,子类重写这个方法时,可以不抛异常,如果抛,则只能抛相同的异常. 所谓相同,指异常的种类必须一致,且个数不能多,也不能少. 看例子: class T { public void m throws FileNotFoundException { ...... } } class TT extends T { public void m { ...... } } class TTT extends T { public void m throws FileNotF

Java便利贴16

1.Java中抽象类和接口的关系:接口是一种比较纯粹的抽象类.即里面的成员函数都是抽象的.但不用写abstract关键字来修饰. 2.接口的成员变量和成员函数都是public,即使不写. 3.通常叫做继承类,实现接口,其实实现是一直特殊的继承. 4.Java中只能继承一个类,但可以实现多个接口. 5.一个接口可以继承多个接口.

Java便利贴6

在Java中,接口(interface)的所有成员变量默认是public static final,也只能是public static final. 所有的方法默认是public,也只能是public. 注:接口中的方法都是抽象方法,但不需要写abstract. 即下面两段代码是等效的: public interface T { public static final int i; public void M() { } } public interface T { int i; public

Java便利贴10

拷贝一个数组到另一个数组,无需遍历每一个元素,因为数组一般都存放在一块连续的空间,所以Java提供了一个arraycopy的方法,可将数组整个拷贝过去. 例子代码如下: public class ArrayCopyTest { public static void main(String[] args) { int[] a = {1,2,3,4}; int[] b = new int[7]; System.arraycopy(a,0,b,0,a.length); for(int i=0; i<b

Java便利贴15

Java中static关键字用法: 1.静态成员变量:所有对象共用一份.可以用类名调用,也可以用对象名调用. 2.静态函数:可以用类名调用,也可以用对象名调用.但注意,函数内部不能使用非静态成员变量.因为非静态成员变量是和对象有关的,但静态函数无法识别是哪个对象的. 3.静态代码块:如下 class Person { static String name; int age; public static void m(){ System.out.println("我是静态函数"); }

Java便利贴9

Java中数组的静态初始化方式如下: int[] a = {1,2,3}; T[] t = { new T(), new T(), new T()}; 动态初始化方式如下: int[] a = new int[3]; a[0] = 1; a[1] = 2; a[2] = 3; T[] t = new T[3]; t[0] = new T(); t[1] = new T(); t[2] = new T();

Java便利贴14

Java中this关键字的常见用法: 1.this指当前对象的成员变量,如下面的构造函数 class Person { String name; int age; Person(String name,int age){ this.name = name; this.age = age; } } 2.调用当前对象的其他构造函数,如下: class Person { String name; int age; Person(String name){ this.name = name; } Per

Java便利贴1

1.文件中只有一个类时,文件名必须与类名一致. 2.文件中不止一个类时,最多只能有一个public类. 3.文件中不止一个类,且没有public类时,文件名可以是任一个类名.编译时会为每一个类生成对应的二进制文件(.class文件),文件名即类名. 4.文件中不止一个类,且有一个public类时,类名必须是public类名.