百度 手机网站收录,网站平台建设需求表,湘潭做网站选择磐石网络,wordpress免费源码文章目录 一、面向对象初步认识1.1 什么是面向对象 二、类的定义和使用2.1 简单认识类2.2 类的定义格式 三、类的实例化3.1 什么是类的实例化3.2 类和对象的说明 四、对象的构造及初始化4.1 如何初始化对象4.2 构造方法(1) 概念(2) 特性 4.3 默认初始化4.4 就地初始化 本文章将带着大家正式进入Java类和对象。类和对象是面向对象语言必须要学习的知识点。 一、面向对象初步认识
1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program简称OOP)在面向对象的世界里一切皆为对象。面向对象是解决问题的一种思想主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序更符合人们对事物的认知对于大型程序的设计、扩展以及维护都非常友好。 1.2 面向对象与面向过程 我们原来所学的C语言就是面向过程的一门语言注重过程而我们现在所学的Java语言以及C是面向对象的一门计算机语言。二者有一定的区别面向过程语言更注重的是过程而面向对象语言更注重结果。
1传统的洗衣过程 这种传统的方式注重的是洗衣服的过程少了一个环节可能就不行。但是不同的洗衣方式洗的方式时间长度等等都是不同的处理起来就比较麻烦如果按照这种方式去写代码将来扩展或者维护起来会比较麻烦。
2现代的洗衣过程 这样的洗衣方式与传统的洗衣方式比起来会方便许多这样的洗衣过程就是人衣服洗衣机洗衣粉四个对象互相协作完成的人不需要关心洗衣机是如何洗衣服如何甩干的。
以面向对象方式来处理问题就不关注洗衣服的过程只需将衣服放进洗衣机倒入洗衣粉启动开关即可通过对象之间的交互来完成的。
二、类的定义和使用
2.1 简单认识类
类是用来对一个实体对象进行描述的主要描述该实体对象具有哪些属性特征哪些功能描述完计算机就可以识别了。 比如人类他是一种高级动物在Java中可以看作是一个类别。 属性鼻子眼睛嘴巴胳膊身体头发等等… 功能吃饭睡觉跑步喝水… 那么我们如何用Java语言来对上面类别进行定义呢
2.2 类的定义格式
在Java中定义类的时需要借助class关键字具体用法如下
//创建类
class ClassName{field; //字段属性或者成员变量method; //成员方法行为}class为定义类的关键字ClassName为类的名字{}为类的主体。
类中包含的内容为类的成员属性主要是用来描述类的称之为类的成员变量或类的属性。 成员变量内部变量是放在类内部方法之外的变量。 方法主要说明类具有哪些功能称为类的成员方法。
class Person{//属性public String name;public int age;//行为方法//睡觉public void sleep() {}//吃饭public void eat() {}
}上面就是人这个类的定义格式。 注意
类名注意采用大驼峰定义。成员前写法统一为public后面文章会解释。此处写的方法不带static关键字。
我们刚刚在一个Java文件中定义了多个类我们要注意的是 根据以上步骤修改即可当我们以这样的方式更改public所修饰的类名时系统会默认也把文件名也修改了。这种方法只适用于一个Java文件中只有一个类的时候
三、类的实例化
3.1 什么是类的实例化 定义了一个类就相当于在计算机中定义了一种新的类型与intdouble类似只不过int和double是java语言自带的内置类型而类是用户自定义了一个新的类型比如上述的Dog类和Person类。它们都是类(一种新定义的类型)有了这些自定义的类型之后就可以使用这些类来定义实例(或者称为对象)。 用类类型创建对象的过程称为类的实例化在Java中采用new关键字配合类名来实例化对象。
class Dog{public String name; //姓名public String color; //颜色public void barks() {System.out.println(汪汪叫~);}public void wag() {System.out.println(摇尾巴~);}
}
public class Test {public static void main(String[] args) {Dog dog1 new Dog(); //实例化dog1.name 阿黄;dog1.color 黄色;System.out.println(dog1.name);System.out.println(dog1.color);dog1.barks();dog1.wag();System.out.println();Dog dog2 new Dog();dog2.name 阿黑;dog2.color 黑色;System.out.println(dog2.name);System.out.println(dog2.color);dog2.barks();dog2.wag();}
}如上代码我们定义一个狗类之后在main主方法中通过new关键字去实例化这个狗类。然后再去给这个实例对象初始化并调用其中的成员方法。运行结果如下。
注意
new关键字用来创建一个对象的实例使用 . 来访问对象中的属性和方法同一个类可以创建多个对象
3.2 类和对象的说明
类只是一个模型一样的东西用来对一个实体进行描述限定了类有哪些成员。类是一种自定义的类型可以用来定义变量。一个类可以实例化出多个对象实例化出的对象 占用实际的物理空间存储类成员变量。
如下图所示 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子类就像是设计图只设计出需要什么东西但是并没有实体的建筑存在同样类也只是一个设计实例化出的对象才能实际存储数据占用物理空间。
四、对象的构造及初始化
4.1 如何初始化对象
通过前面知识点的学习知道在Java方法内部定义一个局部变量时必须要初始化否则会编译失败。
public static void main(String[] args) {int a;System.out.println(a);
}要让上述代码通过编译非常简单只需在正式使用a之前给a设置一个初始值即可。如下代码
class Student {public String name;//姓名public int age;//年龄public void setStudent(String name,int age) {this.name name;this.age age;}public void printStudent() {System.out.println(姓名name\n年龄age);}
}
public class Test2 {public static void main(String[] args) {Student s1 new Student();s1.setStudent(小魏,20);s1.printStudent();}
}需要调用之前写的setStudent方法才可以将具体的日期设置到对象中。通过上述例子发现两个问题
每次对象创建好后调用setStudent方法设置具体日期比较麻烦那对象该如何初始化局部变量必须要初始化才能使用为什么字段声明之后没有给值依然可以使用
4.2 构造方法
(1) 概念 构造方法(也称为构造器)是一个特殊的成员方法名字必须与类名相同在创建对象时由编译器自动调用并且在整个对象的生命周期内只调用一次。 class Student {public String name;//姓名public int age;//年龄public Student() { //构造方法this.name 大强;this.age 21;System.out.println(Student());}
}
public class Test2 {public static void main(String[] args) {Student s1 new Student();//s1.setStudent(小魏,20);s1.printStudent();}
}如上就是一个不带参数的构造方法大家仔细观察会发现所写的方法没有返回值甚至连类型也没有写。那么构造方法是什么时候运行的呢是如何被调用的呢。 大家看代码中被红框圈住的一行代码我这样是为了更好的给大家讲清楚构造方法是什么时候被调用的。 当我们运行代码后我们会发现我们构造方法中所写的那行打印的函数在最前面。 经过我们打断点验证我们会发现构造方法在实例化对象的时候就会被调用。构造方法可以帮我们初始化对象成员变量。 那么问题又来了我们原来没有写构造方法为什么没有报错还是可以正常编译运行。 因为对象的产生换句话说实例化一个对象的时候有两步是很关键的
为对象分配内存调用合适的构造方法 当我们没有写任何一个构造方法的时候那么Java编译器会默认自动提供一个不带参数的构造方法。但是这个构造方法没有做任何事情。 总结我们写自己写构造方法时编译器会调用我们所写的构造方法如果我们没写构造方法时编译器会调用自己默认给的构造方法 构造方法不止一个我们可以根据自己的需求编写不同的构造方法。也根据自己的需求调用不同的构造方法。这些构造方法之间是重载的关系。 例如除了上面那种不带参数的构造方法我们还可以写含有参数的构造方法。如下图所示。 这样的好处就是我们不用在实例完对象之后再进行初始化而是在实例化对象的同时传入参数直接就调用构造方法就可以进行初始化。具体代码如下图所示。 注意如果我们写自己的构造方法了编译器则不会给我们默认提供不带参数的构造方法救急不救穷也就是说如果我们只写一个含参的构造方法但是我们在实例化对象的时候不想传入参数想调用无参的构造方法这是行不通的编译器会报错。如下图所示。 总结当一个构造方法都没有的时候编译器会默认自动给我们提供构造方法如果我们一旦有一个构造方法之后编译器便不会再给我们提供构造方法。 注意构造方法的作用就是对对象中成员进行初始化并不负责给对象开辟空间。
(2) 特性
名字必须与类名相同没有返回值类型设置为void也不行创建对象时由编译器自动调用并且在对象的生命周期内只调用一次(相当于人的出生每个人只能出生一次)构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)如果用户没有显式定义编译器会生成一份默认的构造方法生成的默认构造方法一定是无参的。构造方法中可以通过this调用其他构造方法来简化代码。(如下图) 我们可以借助this在构造方法中调用其他的构造方法。上图代码运行结果如下。 注意this语句只能在所在构造方法的第一行否则会报错。构造方法绝大多数是用public来修饰的特殊情景才会被private修饰。
4.3 默认初始化
在上面我们提到为什么局部变量在使用前一定要进行初始化但是成员变量不用呢 其实是在我们new对象的时候JVM为成员变量分配好了初始值原因比较复杂但我们知道结果就可以。也就是我们所说的默认初始化。 **即对象空间被申请好之后对象中包含的成员已经设定好了初始值。比如
数据类型默认值byte0char‘\u0000’byte0short0int0long0Lbooleanfalsefloat0.0fdouble0.0referencenull
4.4 就地初始化
就地初始化就是在声明成员变量时直接进行赋初始值。 如下代码所示。
public class Date {public int year 1900;public int month 1;public int day 1;
}当然不管是默认初始化还是就地初始化以及我们通过构造方法进行初始化这些都需要我们根据我们不用的应用场景来编写不同的代码。
好啦以上就是Java类和对象的详细介绍相信这篇文章能给大家带来帮助。如果觉得博主写的不错的可以留下你们的关注和点赞和博主一起共同进步一起努力。谢谢大家也欢迎大家到评论下留言讨论。