java学习:构造方法、static、final
2011-11-27 17:16
267 查看
在了解了java的基本数据结构后,开始学习java的类。
java中的类也是一种数据结构,我认为它和C中的结构体挺像。类中可以有属性和方法。类的方法中比较特别的是构造方法。
java中类的构造方法要和类名相同,且没有返回值。构造方法主要用于为类的对象定义初始化状态,在new一个对象时,就会调用构造方法。每个java类都至少有一个构造方法,如果没有显式的定义构造方法,java编译器会为我们提供一个默认的不带参数的构造方法。构造方法不能够直接调用,必须通过new关键字自动调用。
在学习构造方法的过程中,为了能够看到默认的构造方法,使用了jdk提供的工具javap。这个反编译工具在JDK安装目录的bin目录下,使用javap反编译工具,在控制台下输入javap point(类名,javap加载的一个类),就会将类的属性和方法输出。
在使用new关键字创建类的实例时,主要分为三个步骤,即为对象分配内存空间,引起对象构造方法的调用,并为对象返回一个引用。
当使用默认的构造方法初始化对象时,系统会默认的初始化对象的属性,各个数据类型的默认值是:数值-0、boolean-false、char-‘\0’、对象-null。
this变量代表对象本身,当类中有两个同名变量,一个是类的属性,一个是方法中的局部变量,则用this区分类的属性和局部变量。另外,也可以使用this简化构造函数的调用,如:
Point(int n)
{
this.n = n;
}
Point()
{
this(1);
}
有了this的特性,一个类所有的对象调用的方法在内存中就可以只有一份拷贝,尽管在内存中可能有多个对象。但是数据成员在每个对象所在内存中都有一份拷贝。this允许了相同的方法为不同的对象工作。当一个对象调用一个方法时,this变量将被设置为引用该方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据相关联。
static关键字
在方法的返回值前或者变量的类型前加上static修饰,这些方法叫静态方法,变量叫静态变量。
静态方法和静态变量都属于一个类,而不是属于类的对象,也就是说,它在内存中只有一份拷贝。
静态方法和静态变量的可以通过类名直接引用,当然也可以通过对象调用静态的方法。如静态方法static void staticMethod(){} 引用方式可以为:A.staticMethod()、obj.staticMethod(),其中A为类名,obj为类的对象。
需要注意的是在静态方法中不能够调用非静态的方法和使用非静态的成员变量,假如静态方法中使用了非静态的变量或者调用了非静态的方法,那么在使用类名引用该静态方法时,系统无法知道这些非静态的方法和变量如何处理。
final关键字
在java中没有define,如果要定义常量的话,可以使用final来定义。常量在运行的时候不能被修改,所以常量需要在定义的时候赋值,如final int a = 3;另外一种方式是在构造函数中赋初值,如果有多个构造函数,则需要在每个构造函数中都赋值,但是如果某个构造函数中调用了其他的构造函数,则需要注意的是,要保证只能赋值一次。例如:
final int a;
Point(int n)
{
a = 3;
}
Point()
{
a = 4;
this(2);
}
如果没有this(2)这句,上面的代码编译可以通过。如果有了this(2)这句,因为在Point()构造函数中调用了Point(int n)这个构造函数,而Point(int n)这个构造函数也对常量a赋值了,所以相当于对常量a进行了两次的赋值,编译就会报错了。
为了节省内存,通常把常量也声明为static。
java中的类也是一种数据结构,我认为它和C中的结构体挺像。类中可以有属性和方法。类的方法中比较特别的是构造方法。
java中类的构造方法要和类名相同,且没有返回值。构造方法主要用于为类的对象定义初始化状态,在new一个对象时,就会调用构造方法。每个java类都至少有一个构造方法,如果没有显式的定义构造方法,java编译器会为我们提供一个默认的不带参数的构造方法。构造方法不能够直接调用,必须通过new关键字自动调用。
在学习构造方法的过程中,为了能够看到默认的构造方法,使用了jdk提供的工具javap。这个反编译工具在JDK安装目录的bin目录下,使用javap反编译工具,在控制台下输入javap point(类名,javap加载的一个类),就会将类的属性和方法输出。
在使用new关键字创建类的实例时,主要分为三个步骤,即为对象分配内存空间,引起对象构造方法的调用,并为对象返回一个引用。
当使用默认的构造方法初始化对象时,系统会默认的初始化对象的属性,各个数据类型的默认值是:数值-0、boolean-false、char-‘\0’、对象-null。
this变量代表对象本身,当类中有两个同名变量,一个是类的属性,一个是方法中的局部变量,则用this区分类的属性和局部变量。另外,也可以使用this简化构造函数的调用,如:
Point(int n)
{
this.n = n;
}
Point()
{
this(1);
}
有了this的特性,一个类所有的对象调用的方法在内存中就可以只有一份拷贝,尽管在内存中可能有多个对象。但是数据成员在每个对象所在内存中都有一份拷贝。this允许了相同的方法为不同的对象工作。当一个对象调用一个方法时,this变量将被设置为引用该方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据相关联。
static关键字
在方法的返回值前或者变量的类型前加上static修饰,这些方法叫静态方法,变量叫静态变量。
静态方法和静态变量都属于一个类,而不是属于类的对象,也就是说,它在内存中只有一份拷贝。
静态方法和静态变量的可以通过类名直接引用,当然也可以通过对象调用静态的方法。如静态方法static void staticMethod(){} 引用方式可以为:A.staticMethod()、obj.staticMethod(),其中A为类名,obj为类的对象。
需要注意的是在静态方法中不能够调用非静态的方法和使用非静态的成员变量,假如静态方法中使用了非静态的变量或者调用了非静态的方法,那么在使用类名引用该静态方法时,系统无法知道这些非静态的方法和变量如何处理。
final关键字
在java中没有define,如果要定义常量的话,可以使用final来定义。常量在运行的时候不能被修改,所以常量需要在定义的时候赋值,如final int a = 3;另外一种方式是在构造函数中赋初值,如果有多个构造函数,则需要在每个构造函数中都赋值,但是如果某个构造函数中调用了其他的构造函数,则需要注意的是,要保证只能赋值一次。例如:
final int a;
Point(int n)
{
a = 3;
}
Point()
{
a = 4;
this(2);
}
如果没有this(2)这句,上面的代码编译可以通过。如果有了this(2)这句,因为在Point()构造函数中调用了Point(int n)这个构造函数,而Point(int n)这个构造函数也对常量a赋值了,所以相当于对常量a进行了两次的赋值,编译就会报错了。
为了节省内存,通常把常量也声明为static。
相关文章推荐
- Static、final、abstract、接口、构造方法及java语法总结
- java 反射调用 私有构造类中 private static final 属性的方法
- java -private,this,static关键字 和构造方法,final关键字
- 重踏学习Java路上_Day07(成员与局部变量,形参,匿名对象,封装,private,this,构造与成员方法,static)
- java学习记录(二)static与构造方法的回顾总结
- java 动态绑定及成员变量、构造方法,static方法,private,final方法前期绑定
- java基础学习(7)浅析final,private,public,protected,static等关键以及它们的区别的联系
- Java学习笔记--继承中的构造方法
- 黑马程序员—Java面向对象(类和对象、封装、构造方法、this关键字、static关键字)
- Java面向对象学习笔记 -- 4(static、final关键字)
- Java学习----构造方法的重载
- Java学习笔记2:当构造方法有多个参数时考虑使用Builder
- java学习之旅43--final_修饰变量_方法_类
- java学习之路 之 高级类特性2-关键字static、类变量、类方法、单例模式
- java学习123之构造方法
- Java-继承之构造方法,重写,final关键字
- java学习笔记 static,final关键字学习
- JavaSE入门学习23:Java面向对象之构造方法
- 我的java学习之路之构造方法和new关键字
- Java面向对象(3)—— 方法的重写、static、final