萌新卷妹带你从头复习JavaSE-类与对象
萌新卷妹带你从头复习JavaSE-类与对象
✨欢迎关注🖱点赞🎀收藏⭐留言✒
🔮本文由京与旧铺原创,csdn首发!
😘系列专栏:java学习
💻首发时间:🎞2022年10月17日🎠
🎨你做三四月的事,八九月就会有答案,一起加油吧
🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦
🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲
💬推荐一款模拟面试、刷题神器👉[点击进入网站
🔮4.类的封装
🎃4.1privite实现封装
上面我们定义类中的变量或方法时,都是使用了public
关键字修饰,使用该关键字修饰的变量或方法,表示该变量或方法是公共的,在其他和当前类当中都可以使用,但是如果使用privite
关键字修饰变量或方法,表示该变量或方法是私有的,只有它所属类才能访问使用,在其他类无法对该变量或方法进行访问或调用,这也体现了Java的安全性。 看下面一段代码:
class PriviteMember {
private int add(int a, int b) {
return a + b;
}
}
public class ClassCreat {
public static void main(String[] args) {
PriviteMember pm = new PriviteMember();
int x = 10;
int y = 12;
System.out.println(pm.add(x, y));
}
}
由于我们将PriviteMember
类中的add
方法私有,然后在另一个类中实例对象并使用add
,我们发现编译器报错了!
如果调用add
的方法(示例程序中是mian
方法)与add
在同一个类,再次执行程序:
public class ClassCreat {
private int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
ClassCreat pm = new ClassCreat();
int x = 10;
int y = 12;
System.out.println(pm.add(x, y));
}
}
我们发现这个方法能够正常运行:
🎃4.2getter和setter方法
关键字privite
所修饰的变量或方法只能在同一个类之中使用,那如果我们想在另一个类中对那个被privite
变量或方法进行修改或调用,能不能实现呢?其实是可以的,但是是间接性的,就是我们在privite
修饰的变量或方法所在类中定义一个public
修饰的方法来进行对privite
修饰的成员进行访问与修改。
我们可以写出这样的一个类:
class PriviteMember {
private int m;
private double n;
private int add(int a, int b) {
return a + b;
}
public int getterInt() {
return m; //获取m
}
public double getterDouble() {
return n;//获取n
}
public void setterInt(int x) {
m = x;//设置m
}
public void setterDouble(double y) {
n = y;//设置n
}
public int getAdd(int x, int y) {
return add(x, y);//调用私有方法add
}
}
我们在其他类中来调用该类其他公共的变量或方法,能够间接地对私有的成员进行访问与修改。
public class ClassCreat {
public static void main(String[] args) {
PriviteMember pm = new PriviteMember();
pm.setterInt(12);//对m赋值
System.out.println(pm.getterInt());//获取m的值
pm.setterDouble(3.14);//对n赋值
System.out.println(pm.getterDouble());//获取n的值
int a = 14;
int b = 12;
System.out.println(pm.getAdd(a, b));//间接调用私有方法add
}
}
其实在编译器idea
中,可以自动生成getter
与setter
方法,用来设置和获取一个类中私有变量的值或私有方法的返回值。 在idea
编译器中,在代码区右键,找到Generate
,点进去然后选择Getter
或者Setter
就能自动帮助你生成设置和获取私有成员变量的值。
根据需要选择Getter
或Setter
,然后选择需要访问的变量,按住ctrl
能够多选。 this
关键字修饰,表示的是当前对象中的引用,能够用来访问当前对象的成员变量与方法。
🔮5.构造方法
🎃5.1new执行过程
👻5.1.1new实例化对象过程
使用关键字new
实例化对象过程中,其实分为两步:
-
为对象分配内存空间
-
调用构造方法(如果没有类中任何构造方法,会自动生成一个不带参数的构造方法)
👻5.1.2构造方法
构造方法是一种特殊方法, 使用关键字new
实例化新对象时会被自动调用,所以构造函数是定义在类中的,他有以下特点:
-
方法名称必须与类名相同。
-
没有返回值。
-
每个类中至少有一个构造函数,如果类中没有定义,则会自动生成一个不带参数的构造方法。
-
构造方法支持重载, 规则和普通方法的重载一致。
-
若类中定义了含参数的构造方法,则默认的无参构造方法将不再生成。
🎃5.2this关键字
关键字this
在前面使用Setter
生成函数时,发现自动生成的函数中有变量被this
修饰,被this
关键字修饰,表示的是当前对象中的引用,能够用来访问当前对象的成员变量与方法。
❗️注意!this
表示当前对象的引用,而不是当前对象,在构造函数中我们是可以使用this
,但是调用构造方法时,该对象还没实例化完成,只是分配了内存,说明对象还没有定义好,但是引用已经生成了,因为内存分配完成了,那么地址也就出来了,引用也自然而然也出来了。所以this
表示的是当前对象的引用,而不是当前对象。
关键字this
的三种使用方式: |方式|解释| |---|---| this.成员变量名 | 访问当前对象的属性(成员变量) this.方法名(对应参数列表)| 调用当前对象的方法 this()|在构造方法中调用当前对象的其他构造方法,必须位于构造方法的第一行
如下代码可以证明this
是可以在构造方法中使用的:
class ConstructionMethod {
public int a;
private int b;
public ConstructionMethod() {
System.out.println("这是一个不带参数的构造方法!");
}
public ConstructionMethod(int x) {
this.b = x;
System.out.println("这是一个带有参数的构造方法!可以给成员变量b赋值!赋值后b = " + this.b);
}
public ConstructionMethod(int x, int y) {
this.a = this.add(x, y);
System.out.println("这是一个带有两个参数的构造方法!可以计算两个整数的和!这两个数的和为:" + a);
}
private int add(int m, int n) {
return m + n;
}
}
public class ClassCreat {
public static void main(String[] args) {
ConstructionMethod cm1 = new ConstructionMethod();
System.out.println("------------");
ConstructionMethod cm2 = new ConstructionMethod(12);
System.out.println("------------");
ConstructionMethod cm3 = new ConstructionMethod(18, 2);
}
}
- 点赞
- 收藏
- 关注作者
评论(0)