java之成员变量(实例成员变量和静态成员变量)类的成员
类的成员可以包含以下:字段、⽅法、代码块、内部类和接⼝等。此处我们重点介绍字段.
1.1字段/属性/成员变量
在类中, 但是⽅法外部定义的变量. 这样的变量我们称为 "字段" 或 "属性" 或 "成员变量"(三种称呼都可以, ⼀般不会严格区分).在java中,成员变量分为两种:实例成员变量和静态成员变量。
1.1.1实例成员变量
实例成员变量:是定义在⽅法外部和类内部的且不被static所修饰的变量.⽤于描述⼀个类中包含哪些数据
代码⽰例:
class Person {
public String name;//其别名有三种:属性/实例成员变量/字段
public int age;
public boolean flg;
public char ch;
}
public class LeiHeDuiXiang {
public static void main(String[] args) {
Person person = new Person();
//默认值为0
System.out.println(person.age);
//默认值为null
System.out.println(person.name);
//默认值为'\u0000',输出时不显⽰任何东西
System.out.println(person.ch);
/
/默认值为false
System.out.println(person.flg);
}
注意事项:
1:通过对象的引⽤来访问实例成员变量
2:"访问" 既包含读, 也包含写.
3:对于⼀个成员变量如果没有显式设置初始值, 那么会被设置⼀个默认的初值.
下⾯来介绍下成员变量(不管是静态成员变量还是实例成员变量)在不赋值情况下的默认取值吧:
byte short int long默认取值为 0
float 默认取值为0.0f;
double 默认取值为0.0
boolean 默认取值为false
char 默认取值为'\u0000'(最终输出时为空)
1.1.2静态成员变量
static关键字修饰成员变量,简称静态成员变量,⼜称类变量
1.访问⽅式:通过类名.静态成员变量名进⾏访问
2.内存的存储⽅式:⽅法区
3.特点:静态的只有⼀份,且不依赖对象
代码⽰例:
class Man {
public static int count;
}
public class LeiHeDuiXiang {
public static void main(String[] args) {
System.out.unt);
System.out.unt);
System.out.unt);
}
}
//输出结果为:
1
2
3
因为count为静态成员变量,其存储在⽅法区中且只有⼀个,是共享的,所以每次当访问它时,都会影响它的值
1.2认识null
null 在 Java 中为 "空引⽤", 表⽰不引⽤任何对象. 类似于 C 语⾔中的空指针. 如果对 null 进⾏ . 操作就会引发异常.
代码⽰例:
class Person {
public String name; public int age;
}
class Test {
public static void main(String[] args) { Person person = new Person();
System.out.println(person.name.length()); // 获取字符串长度
}
}
// 执⾏结果
Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:9)
同时假如我们给⼀个对象的引⽤赋值为null时,当输出这个引⽤此时还是为null,⽽假如此时不为空的话,输出值⼜会为多少呢?Person person1 = new Person();
System.out.println(person1);
上述代码最终的输出结果为如下:
Person为类,@为分隔符,4554617c为对象地址的哈希值,那么为什么最终的输出结果为这个呢?我们来看下源码便⼀清⼆楚了
1⾸先来看println处的源码:
Object类为所有类的⽗类,valeOf⽅法是将引⽤x转化为字符串,那么是如何转化的呢?我们接着看valeOf的源码:
此处判断这个引⽤是否为空,若为空,则返回null,若不为空,则返回这个引⽤所调⽤的toString⽅法的返回值,那么我们再来看toString⽅法的源码吧:
我们可以看到,toString⽅法返回的是类的名字加上⼀个分隔符号@再加上⼀个把哈希值变成⼗六进制的数字
总结:1.当我们输出对象的引⽤时,此时我们会在底层调⽤Object类的toString⽅法,返回⼀个对象地址的⼗六进制哈希值
3. toString 是 Object 类提供的⽅法, 我们⾃⼰创建的 Person 类默认继承⾃ Object 类, 可以重写 toString ⽅法实现我们⾃
⼰版本的转换字符串⽅法. (关于继承和重写这样的概念, 我们后⾯会重点介绍).
java的tostring方法4.IDEA快速⽣成Object的toString⽅法快捷键:alt+f12(insert),此处我们没有重写这个默认的toString⽅法,并⽆⼤碍,后
⾯会详细介绍。
1.3成员变量初始化
很多时候我们不希望成员变量使⽤默认值, ⽽是需要我们显式设定初值. 那么此时有五种⽅法供我们成员变量初始化:
1:默认初始化,即程序所赋予的默认值,上⾯已经讲过,此处不再过多陈述。
2:就地初始化:即在定义成员变量时便进⾏初始化,如下所⽰:
public String name = "张三";
public int age = 18;
3:类外初始化,即通过对象的引⽤进⾏初始化,这种⽅法⼀般⽤的最多,下⾯来看下实现过程:(注意私有的可通过setXX和getXX ⽅法实现)
public static void main(String[] args) {
Person person = new Person();
person.name = "张三";
person.age = 14;
}
4:通过实例代码块和静态代码块进⾏初始化:这个在后⾯我们会专门讲到,在这⾥只需要知道这两个代码块的作⽤⼀般是提前初始化⼀些数据.
5.通过构造⽅法进⾏初始化。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论