目录
前言
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面 向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人 们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。
一.类和对象的定义
1.什么是一个类?
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。
比如:小猫,在Java中可以将其看成一个类别。
属性:毛皮颜色,四条腿的长短,体重,身高……
功能:喵喵叫,玩绣球
2.类的定义格式
在java中定义类时需要用到class关键字,如下图,我们打开idea选择Class然后输入想创建的Name,点击回车,就会创建一个类。
3.一个类中应该有什么
如下:
// 创建类 class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
这里有一些注意事项需要注意:
- 类名注意采用大驼峰定义
- 成员前写法统一为public
- 此处写的方法不带 static 关键字
4.什么是对象
当我们构造完一个类,在此基础上,我们可以创建对象,通过对象可以对成员变量进行初始化,也可以调用成员方法。
二.类的实例化
1.什么是实例化?
通过new关键字,配合类名就可以实例化对象。用类类型创建对象的过程,称为类的实例化
Person p = new Person();
一些注意事项:
- new 关键字用于创建一个对象的实例.
- 使用 . 来访问对象中的属性和方法.
- 同一个类可以创建对个实例.
2.实例化在内存中的使用情况:
三.构造方法(构造器)
1.什么是构造方法
- 构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。
- 构造器没有返回值,也没有返回类型(void也不行)。
- 构造器可以进行方法的重载。
- 构造器一般使用public修饰符
- 构造方法不是必须的,因为会默认给一个构造器。
- 构造方法只能通过new或this调用。
- this(...)必须是构造方法中第一条语句
2. 默认初始化
为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?
这是因为在Java中,对象成员(即成员变量)的默认初始值取决于其数据类型。以下是常见数据类型及其默认值:
数据类型 | 默认值 |
byte | 0 |
char | '\u0000' |
short | 0 |
int | 0 |
long | 0L |
boolean | false |
float | 0.0f |
double | 0.0 |
reference | null |
对象空间被申请好之后,对象中包含的成员已经设置好了初始值。
3.this关键字
3.1为什么要有this关键字
请看下面代码
public class Date {
public int year;
public int month;
public int day;
public void setDay(int y, int m,int d){
year=y;
month=m;
day=d;
}
public void printDate(){
System.out.println(year + "/" +month +"/"+day);
}
public static void main(String[] args) {
Date d1 = new Date();
Date d2 = new Date();
Date d3 = new Date();
d1.setDay(2020,9,15);
d1.setDay(2020,9,16);
d1.setDay(2020,9,17);
d1.printDate();
d2.printDate();
d3.printDate();
}
}
以上代码定义了一个日期类,然后main方法中创建了三个对象,并通过Date类中的成员方法对对象进行设置和打 印,代码整体逻辑非常简单,没有任何问题。
但是仔细思考一下你会发现如下疑问:
1. 形参名不小心与成员变量名相同:(like this)
public void setDay(int year, int month, int day){
year = year;
month = month;
day = day;
}
那函数体中到底是谁给谁赋值?这是一个问题。
那么我们该如何解决这个问题呢?
那就是this关键字。
3.2什么是this引用
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该 引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
虽然有时候并不影响代码,在我们学习了this之后,调用成员变量时最好都加上this,减少后期修改的工作量。
3.3this引用的特性
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型。
- this只能在"成员方法"中使用。
- 在"成员方法"中,this只能引用当前对象,不能再引用其他对象。
- this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收。
4.构造器的使用
1.
- 不是说构造器是类的一部分吗?为什么我们不定义构造器代码也能正常运行?
- 这是因为啊。编译器在进行编译时,系统会自动增加一个无参数构造方法。
2.
- 提出一个问题,当我们定义了构造器后,系统还会自动增加无参构造器吗?
- 当然不会,所以当我们定义了一个有参构造器时,我们还需要定义一个无参构造器,否则编译器就会报错!
3.
- 普通成员方法中 this 可以引用构造方法吗?
- 不可以!! 但是可以引用其他成员方法,以及构造方法才能互相调用!
4.
- 每个构造器都可以互相调用吗?
- 不可以!!!构造方法之间的调用不能闭环!
5.
- 与类同名的不一定就是构造方法。 比如在构造方法前加入变量类型就会变成一个成员方法,大家动手试试!
四.封装
面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节。
1.访问限制符
范围 | private | defualt | protected | public | |
1 | 同一包的同一类中 | √ | √ | √ | √ |
2 | 同一包的不同类中 | √ | √ | √ | |
3 | 不同包中的子类 | √ | √ | ||
4 | 不同包中的非子类 | √ |
- public:可以理解为一个人的外貌特征,谁都可以看得到
- default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了(也是什么都不写时的默认权限)
- private:只有自己知道,其他人都不知道
- protected:主要是用在继承中
2.包的概念
在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件 包。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件 下,也可以对某个文件夹下的音乐进行更详细的分类。
2.1怎样创建一个包
包的命名一般是域名的倒置。创建方式如图:
倒置域名
小tips:不同包的类名可以重复
五.小结
本次分享到此结束,感谢您的阅读,如果您觉得我写的还不错或者对您有帮助,请留下您宝贵的点赞,如果您发现我写的有什么错误,欢迎评论区留言!
标签:Java,构造方法,对象,成员,构造,int,详解,public From: https://blog.csdn.net/2402_83799883/article/details/143057732