目录
1、类和对象
1.1、什么是面向对象
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。
面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。
在面向对象定义中,也规定了一些基本的特征:
- 封装:保护内部的操作不被破坏;
- 继承:在原本的基础之上继续进行扩充;
- 多态:在一个指定的范围之内进行概念的转换。
对于面向对象的开发来讲也分为三个过程: OOA(面向对象分析)、 OOD(面向对象设计)、 OOP(面向对象编程)。
1.2、类与对象的基本概念
类与对象是整个面向对象中最基础的组成单元。
类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠 属性来区分不同对象。
总结:
类和对象的区别:
类是 对象的一个模板, 对象是 类的实例。类只有通过对象的才可以使用,而在开发之中应该先产生类,之后再产生对象。 类不能直接使用,对象是可以直接使用的。
1.3、类与对象的定义和使用
再Java中定义类,使用关键字class完成。语法如下:
class 类名称 {
属性(变量);
行为(方法);
}
实例:定义一个Student类
class Student{
String name;
int age;
public void tell(){
System.out.println("姓名:"+ name +",年龄:" + age);
}
}
注意事项:
- 类名注意采用大驼峰定义
- 成员前写法统一为public,后面会详细解释
- 此处写的方法不带static 关键字,后面会详细解释
1.3.1、定义一个学生类
属性:姓名 性别 年龄 学分
方法:来上课:输出'按时上课,不要迟到,如果请假,即使补课'
写作业:输出'教务系统,完成作业,一旦拖沓,神仙难救'
要考试:输出:'考试目的,了解学情,人人必考,暴漏问题'
public class Student{
public String name;
public String gender;
public short age;
public double score;
public void DoClass(){}
public void DoHomework(){}
public void Exam(){}
}
注意事项:
- 一般一个文件当中只定义一个类
- main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
- Public修饰的类必须要和文件名相同
- 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改
2、类的实例化
2.1、 什么是实例化
定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型。
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
2.2、类的实例化格式
类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于 类属于引用数据类型,所以对象的产生格式有两种,如下:
1、格式一:声明并实例化对象
类名称 对象名称 =new 类名称();
当一个实例化对象产生之后,可以按照如上边方式进行类的操作
对象 . 属性:表示调用类之中的属性;
对象 . 方法:表示调用类之中的方法
实例:
class Student{
String name;
int age;
public void tell(){
System.out.println("姓名:"+ name +",年龄:" + age);
}
}
public class TestDemo{
public static void main(String args[]){
Student per = new Student();//声明并实例化对象
per.name = "张三";//操作属性内容
per.age = "30";//操作属性内容
per.tell();//调用类中的tell()方法
}
//运行结果:
//姓名:张三 , 年龄:30
2、格式二:先声明对象,然后实例化对象:
类名称 对象名称 = null;
对象名称 = new 类名称();
实例:
class Student{
String name;
int age;
public void tell(){
System.out.println("姓名:"+ name +",年龄:" + age);
}
}
public class TestDemo{
public static void main(String args[]){
Person per = null;//声明对象
per = new Person();//实例化对象
per.name = "张三";//操作属性内容
per.age = 30;//操作属性内容
per.tell();//调用类中的tell()方法
}
}
//运行结果:
// 姓名:张三,年龄:30
引用数据类型 与基本数据类型 最大的不同 在于:
引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要 使用引用数据类型,就要使用关键字new来分配内存空间。
以上两种不同的实例化方式有什么区别呢?
我们从内存角度分析。首先,给出两种内存空间的概念:
堆内存:保存对象的属性内容。堆内存需要用new关键字来分配内存空间;
栈内存:保存的是堆内存的地址。(在这里为了分析方便的,可以理解为栈内存保存的是对象的名字)
在任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的 默认值。
上面两种实例化对象方式用内存表示如下:
如果使用了没有实例化的对象,结果会如何?
class Student{
String name;
int age;
public void tell(){
System.out.println("姓名:"+ name +",年龄:" + age);
}
}
public class TestDemo{
public static void main(String args[]){
Person per = null;//声明对象
// per = new Person();//实例化对象
per.name = "张三";//操作属性内容
per.age = 30;//操作属性内容
per.tell();//调用类中的tell()方法
}
}
运行结果:
此时,程序只声明了Student对象,并没有实例化Student对象。
3、默认初始化
在上边的图片中可以看到,类实例化对象之后,类中的属性,对象中就存在了,但是上述2步骤没有对对象进行初始化时,其中的属性都有默认的值,这是为什么呢?
这是JVM为所开辟的空间进行的初始化,给属性附上相应的默认值。
相应类型对应的默认值为:
数据类型默认值byte0char'\u0000'short0int0long0Lbooleanfalsefloat0.0fdouble0.0referencenull
这里默认初始化只是简单说一下,后边还会详细讲解
本篇文章,大部分内容借鉴了 博主志见的内容,推荐大家可以点下边链接观看,博主讲解的内容思路特别清晰。
原文链接:https://blog.csdn.net/wei_zhi/article/details/52745268
Original: https://blog.csdn.net/m0_73067372/article/details/127798257
Author: m0_73067372
Title: 【JavaSE】类和对象(一)