我们知道Java是一种面向对象的语言(Object Oriented Programming)简称为OOP语言,什么是面向过程语言而什么是面向对象的语言呢?这里我们举一个简单的例子你要洗衣服,你需要把需要洗的衣服放在盆子里,然后向盆子里加入洗衣粉端着盆子去接水洗衣服,换水再洗再拧干,这一系列的过程都需要你来 *** 作,这就是面向过程,注重的实现的过程。如果你有一台洗衣机,你只需要把衣服和洗衣粉都加入到洗衣机里等它工作完成就好,你只需要洗干净衣服这个结果就好,这就是面向对象的过程。
面向对象只针对实现自己的目的,所以我们需要用模块来实现一个功能或者属性来组成这一个洗衣机
二、类与对象的基本概念类相似结构体,但是不同,结构体可以定义一些数据值,而结构体内部可以定义字段/成员变量,方法,多了一些过程,就是洗衣服的一系列过程。
对象是类的实例化,讲这个类的“图纸”实例化成了一个洗衣机,我们就可以去用这个对象去做我们想要实现的内容了。
类与对象是面向对象中最基本的组成单元,先有模板才有实物、现有类才有对象。
三、类与对象的定义与实现class washer {
//这些是字段/成员变量
String name;
int power;
String fuction;
}
这里我们以洗衣机为例,我们先定义洗衣机的名字,功率以及功能。
class washer {
//这些是字段/成员变量
String name;
int power;
String fuction;
//这里是功能的实现/方法
public void washcloth() {
System.out.println("开始自己洗衣服啦");
}
public void wring() {
System.out.println("开始拧干衣服啦");
}
public void introduction() {
System.out.println("这台洗衣机的名字是:"+name+"功率是"+power+"功能有"+fuction);
}
}
我们再来定义洗衣机的功能实现。
这样我们就把这个洗衣机的模板做好了。下面我们就开始”制造“这个洗衣机了,也就是对象的实现
方法一:washer wash=new washer();
方法二:washer wash=null;
wash=new washer();
这两个方法的结果是一样的,这里我们用到了new关键字那为什么要用呢?
washer wash这里我们定义了一个washer类型的对象名字叫做wash,我们的内存分布有栈区和堆区,栈区是存放堆区内容的地址的,这里的wash其实就是一个地址他的内容真实存放在堆区上也就需要new这个关键字在堆区开辟内存内容是washer的内容。
下面我们往这个对象中加入东西了
方法一:外部定义wash.name="海尔洗衣机";
wash.power=120;
wash.fuction="洗衣功能与风干功能";
我们在定义完wash后在主方法内部用(对象名+.)的方法来定义内容。这样我们的全部代码就成了这个样子。
class washer {
//这些是字段/成员变量
String name;
int power;
String fuction;
//这里是功能的实现/方法
public void washcloth() {
System.out.println("开始自己洗衣服啦");
}
public void wring() {
System.out.println("开始拧干衣服啦");
}
public void introduction() {
System.out.println("这台洗衣机的名字是:"+name+" "+"功率是"+power+" "+"功能有"+fuction);
}
}
public class TestDemo2 {
public static void main(String[] args) {
washer wash=new washer();
wash.name="海尔洗衣机";
wash.power=120;
wash.fuction="洗衣功能与风干功能";
wash.washcloth();
wash.wring();
wash.introduction();
}
}
这也是我们一般实现的方法与逻辑,当然只是方法一
方法二:其实每一个类都会有一个构造方法(构造器),如果你不定义这个构造方法,那在这个类中都会自己构造一个不含参数的构造方法这个public washer()是隐藏的我们不这么定义也会有一个默认的这个,下面我给大家测试一下
我们手动写出了这个构造方法只要这个类被实例化一定会被进行这个构造方法所以我们再这个方法里面加了打印的字符串,测试出它确实是存在的,并且会在对象的实例化时候作用,所以我们的方法二可以在构造方法里面修改成员变量
这里我们手动构造一个方法,这样就不会默认构造不含参数的方法了,它是救贫不救急的
public washer(String name, int power, String fuction) {
this.name = name;
this.power = power;
this.fuction = fuction;
}
这样我们也实现了对象的赋值。
这里给大家拓展一下:我们可以用两个构造方法,用不带参数的去引用带参数的构造方法,这里用关键字this,并且这里的this必须放在第一行。
public washer() {
this("海尔洗衣机",120,"洗衣功能与风干功能");
System.out.println("构造方法");
}
public washer(String name, int power, String fuction) {
this.name = name;
this.power = power;
this.fuction = fuction;
}
方法三、就地赋值
这样我们的对象就都是其对应的固定值了,但是我们不推荐这样的方法,因为面向对象的语言最好不要是一下把内容写死的,这里我们更推荐方法一和方法二。
拓展: 一:我们通过上面的学习肯定了解了类与对象,但是我们在做一些内容的时候会感觉这是不够用的,比如我实例化了很多个对象(这里还是用洗衣机为例子)我造了一批洗衣机都是中国制造的,那我就没有必要每次都给这些洗衣机声明它们都是中国制造的,我们只需要把他们都放在中国制造的这个仓库下面这样我们就知道这都是中国制造的而不需要每次都声明了所以我们用静态成员来实现String name;
int power;
String fuction;
public static String univer="中国";
这里的public static String univer="中国";就是我们要实现的,这个静态成员不算是方法的成员变量,他是存在于方法区的我们来证明一下这里的wash没有我们的univer所以这不是我们的成员变量但是我们可以通过方法来访问,我们不推荐,
建议使用类名来访问,因为它不属于方法的成员变量。
二:在我们的使用中,我们会希望有一些内容只在类的内部使用需要一些隐私,我们可以使用private这个关键字他和public相反,前者是私有的而后者是公开的,如果我们不加前缀的话默认他们为default类型下面我给大家演示一下:这里我们把name改成私有类型
在类的外面我们就不可以再使用这个成员了,我们只能在类的内部对这个成员进行访问
也可以使用类方法接口来实现赋值访问 *** 作。
如果我们没有对成员赋值 *** 作,因为对象实在堆上开辟的所以所有的成员都会被默认为其对应的默认值,
byte | 0 |
char | '\u0000‘ |
short | 0 |
int | 0 |
long | 0L |
boolean | false |
float | 0.0f |
double | 0.0 |
reference | null |
以上就是类与对象的内容了,下面我还会发布类跨包的访问以及类与其他内容的博客,如果觉得不错请点赞收藏关注一波!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)