JAVA中的属性、方法、构造器,你真的弄懂了吗?

一、变量分类

  • 成员变量:在方法体外,类体内声明的变量称为成员变量;不以static修饰的是实例变量,以static修饰的为类变量
  • 局部变量:在方法体内部声明的变量称为局部变量
成员变量 局部变量
声明的位置 直接声明在类中 方法形参或内部、代码块内、构造器内等
修饰符 四种权限修饰符、final等 不能用权限修饰符修饰、可以用final修饰
初始化 有默认初始化 没有默认初始化,必须显式赋值
内存加载位置 堆空间或静态域内 栈空间

二、初始化赋值

当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用数据类型。

成员变量类型 初始值
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
char 0或写为'\u0000'(表现为空)
boolean false
引用数据类型 null

三、对象的内存解析

先看一下如下代码:

public class Person { public static void main(String[] args) {
        Person p1 = new Person();
        p1.age = 20;
        p1.name = "cabbage";
        Person p2 = new Person();
        p2.age = 12;
    } private String name; private int age;
}
内存解析图:

简单解析一下:以p1对象引用为例,当我们创建该对象时,成员变量就会放在堆空间中,先是默认初始化值null、0,之后通过对象.属性的赋值方式把属性值分别改为:cabbage、20。


四、对象数组的内存解析

先看如下代码:

public class Person { public static void main(String[] args) {
        Person[] people = new Person[2];
        people[0] = new Person();
        people[0].name = "cabbage";
        people[0].age = 20;
        System.out.println(people[0].toString());
        System.out.println(people[1]);
    } private String name; private int age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}
内存解析图:

简单解析一下:因为是对象数组,所有初始值每个默认值都是null,当给people[0]创建对象时,会在堆空间中开辟一个空间用来储存成员变量name、age;对象赋值的过程与对象内存解析的方式一样。

运行结果:


五、方法使用介绍

1、方法的声明:

  • 权限修饰符 返回值类型 方法名(形参列表){ 方法体 }

2、返回值类型:有返回值 vs 没有返回值

  • 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量:“return 数据”
  • 如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不需要使用return.但是,如果使用的话,只能“return;”表示结束此方法的意思

3、return关键字的使用:

  • 使用在方法体中,方法中不可以定义方法
  • 作用:结束方法、针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据
  • 注意点:return关键字后面不可以声明执行语句
  • 方法的使用中,可以调用当前类的属性或方法
  • 特殊的:方法A中又调用了方法A:递归方法

六、方法重载

  • 含义:同一个类、方法名一样、形参列表(个数、类型、顺序)不同

下列方法都构成了重载:

public class Person { private String name; private Integer age; public void one() { } public void one(Integer age) { } public void one(String name) { } public void one(String name, Integer age) { } public void one(Integer age, String name) { }
}

我们再来看看可变个数的形参:

public class Person { public static void main(String[] args) {
        Person person = new Person();
        person.one("one","two","three");
    } public void one() { } public void one(String... names) { }
}
  • 可变个数形参的格式:数据类型 ... 变量名
  • 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
  • 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。
  • 可变个数形参在方法的形参中,必须声明在末尾且最多只能声明一个可变形参。

最后来看看方法形参的传递机制:值传递

  • 形参:方法定义时,声明的小括号内的参数

  • 实参:方法调用时,实际传递给形参的数据

值传递机制:

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。

  • 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。


七、构造器

构造器说明:

  • 如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
  • 一个类中定义的多个构造器,彼此构成重载
  • 一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器
  • 一个类中,至少会有一个构造器。
public class Person { public static void main(String[] args) {
        Person person = new Person();
    } public Person() {
        System.out.println("我是构造器");
    }
}
运行结果:

八、this关键字

this说明:

  • this可以用来修饰、调用:属性、方法、构造器

  • 在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法。

  • 在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器

  • 构造器中不能通过"this(形参列表)"方式调用自己

  • 规定:"this(形参列表)"必须声明在当前构造器的首行

  • 构造器内部,最多只能声明一个"this(形参列表)",用来调用其他的构造器

写个代码验证一下:

public class Person { public static void main(String[] args) {
        Person person = new Person("cabbae", 20);
    } private String name; private Integer age; public Person(String name, Integer age) { this(name); this.name = name; this.age = age;
    } public Person(String name) {
        System.out.println("我的名字是:" + name);
    }
}
运行结果:
#Java##计算机##程序员##编程#
全部评论
这些 貌似都比较基础
点赞 回复 分享
发布于 2022-08-07 17:05

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
2025年初,新的一年开始,我给自己暗暗打气,发誓今年一定要拿到offer。如今2025年即将结束,找工作仍然没有任何水花,如今的失意和落魄和年初信心满满的姿态形成鲜明对比,想必也是因为被社会毒打,认清现实了吧。先分享一下贴主的背景,本人女,本科末流985文科专业,后来保送到华五,成绩一直是班级第一,有过国奖,实习有多段头部大厂经历。发贴的直接原因是今天华为面试挂,在反思中有很多复杂的想法,包括对自身能力的怀疑、对面试官所提问题的不解、对大环境的无奈。贴主是一个说话温柔、不喜欢咄咄逼人、有点社恐的人(基本上算是人们眼中对小女生的刻板印象,所以在历次群面中基本全挂(看到大家争抢当leader、t...
在找内推的小虾米:感觉这一段经历和我好像啊,前段时间面了很多车企,面试项目经历各种被拷打,大多数都没过一面,最有希望拿offer的一个终面挂了把我干破防了,打电话给爸妈哭了一个多小时才缓过来。我也开始否定自己,否定自己的一切,包括性格,能力,成长经历。。。最后面了深圳的某家公司,面试官人都挺友好,提的问题有深度但找到切入点 ,最后hr也按岗位最高的标准给的offer,我才发现自己并没有这么不堪,只是我的能力和经验和之前的岗位要求不那么符合而已。帖主一定不要灰心,招聘的窗口期还有很长很长,保持自信扬长避短,一定有企业能发现你的闪光点,祝好。
我的求职进度条
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务