回顾上篇
上次的一篇是管于虚拟机如何执行HelloWorld的,其实t我在上课听的时候,同样一脸mb,打开一门编程语言的helloworld居然弄的这么"花里胡哨"的.让我们回顾一下:
1.jvm从主方法入口,将所需要的类加载到方法区的类代码区(HelloWorld.class;String[].class;toString.class;System.class;)
2.主方法在栈区开辟对应空间----主线程的主方法栈帧
3.执行String s=“HelloWorld!”;时 在分别在堆区和方法区的常量池创建 s和
"HelloWorld!"对象
4.打印结果:System.out.println(s); 三个流对象在堆区开辟空间,println();toString()方法在方法区的共享代码区开辟
所以很多简单的东西,要钻研的话还是暗藏很多知识的,所以,简单的细节也很重要的.
Java的构造方法
什么是构造方法?
咱们将这个名词拆分一下:
1.首先,他是个方法,要知道Java中方法是不可能脱离类而存在的,所以他一定是在类当中的.
我们将与该类同名的方法,称之为该类的构造方法,且这个方法是不存在返回值的
(注意区分不存在返回值,和返回值类型为void,构造方法的声明里不存在返回值这个概念,不能有void,否则就是一个新的实例方法)
2.其次是构造,注意构造并不是从无到有,所以构造方法并不能创建对象,最多的用处就是用来给对象初始化.
3.谁来调用构造方法呢?
显然不能是我们自己,在Java中是虚拟机自动调用构造方法,给对象进行初始化
构造方法的声明
访问权限+类名+(参数签名){
}
例如: public class Person{ public Person(){} }
1.一般来说构造方法的访问权限为public ,不过在单例中要定义为private
2.任何一个类都有构造方法,至少一个(可以重写,在创建对象并初始化时显示到底调用哪个构造方法),
3.当你没有显示的写出来时,系统会默认有一个无参的构造方法给你使用,一旦你写了任何一个构造方法时,系统则不会给你无参的构造方法
get和set方法,this指针
咱们之前说过,很多情况下,出于安全的目的,将类中的属性定义为私有,只能在这一个类中才能访问.那我们如何在其他类中调用本类的私有属性呢?
很简单,通过get 和set 方法
set方法
为私有属性设值,返回值为void,有与其对应的形参
get方法
获取该私有属性的值,返回值是与其对应的数据类型,无形参
在Java中规定了get 和set方法的命名规则:当你要get或set一个属性时,该属性的首字母必须大写
例如:
public class Person {
private String name;
private boolean sex;
public void setName(String name){
this.name=name;
}
public void setSex(boolean sex){
this.sex=sex;
}
public String getName(){
return name;
}
public boolean getSex(){
return sex;
}
this
从上面的代码可以发现一个新鲜的东西就是this,在Java中他运用也十分的广泛和灵活的,
this是个空间地址,是new的返回值
其实可以将他当作一个指针来理解就好了,谁调用他,他就是谁.十分灵活.
this.name=name;
在这里如果不用this.name=name;虚拟机并没有想象的那么智能,他不知道右边的name是形参,左边的是对象的name.他会有个类似就近的机制,将看到的第一个name,认为是形参的name.
注意:静态的方法中无法传递this,会报错,只能通过类调用
构造方法一定要拿到对象地址
所以不是静态的