当前位置:网站首页>对象和类总结
对象和类总结
2022-08-02 14:21:00 【靳靳有味小丸子】
一、什么是对象?什么是类?
在开发过程中,其实是分为两个阶段的,一个是设计阶段,一个是实现阶段。
在设计阶段是我们通过场景,带入用例去分析,在这个时候这些用例都是以对象的方式出现的。然后在通过归纳发现具有相同属性和行为的对象,这个归纳是人脑的一种抽取,我们得到类的概念。
在实现过程中,代码是先定义类,然后通过类产生对象。把类看成是对象“模版”,先定义好模版,然后通过模版进行复制,产生无数个对象。在具体使用的时候,一定是用对象而不是用类。
类与对象之间的关系一句话:类是对象的模板,对象是类的实例。
二、类的实例化
(1) 定义类
声明一个类就是创建一个新的数据类型,而类在 Java 中属于引用类型, Java 使用关键字 class 来声明类;
示例:
public class Demo {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
(2) 类的实例化
用类类型创建对象的过程,称为类的实例化;
一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量;
示例:
public class Demo {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
public class Main{
public static void main(String[] args) {
Person person = new Person();//通过new实例化对象 person-->引用变量
person.eat();//成员方法调用需要通过对象的引用调用 访问-->引用.方法
person.sleep();
//产生对象 实例化对象
Person person2 = new Person();
Person person3 = new Person();
}
}
三、成员变量和局部变量
1. 作用域不同
局部变量的作用域:局部变量在方法的内部;
成员变量的作用域:成员变量在类的内部,方法的外部,作用在整个类;两类变量同名时,局部变量具有更高的优先级
2.初始值不同
局部变量需要初始化;成员变量Java中会有一个默认值,可以不初始化;
3.存储位置不同:
局部变量在栈上;成员变量在堆上。
四、访问修饰符
Java中四种权限修饰符:public(公共的)、protected(受保护的)、default(默认的(也可以不写))、private(私有的);
五、this关键字
如果局部变量和 成员变量 产生命名冲突 用this指明当前对象
构造函数重载,在一个构造函数中用this(形参)调用其他的构造函数。举例如下方代码第11行。
1、构造函数不能用this()相互调用。
2、this()调用构造函数不能在成员函数中调用
3、当前构造函数 不能通过this 调用多个构造函数。
4、this()调用必须位于当前构造函数有效代码第一行。
public class Demo {
//属性—>实例变量/成员变量
String name;
double age;
// 构造函数 初始化 成员变量
public Demo(String name1, double age) {
name = name1;
this.age = age;
}
public Demo() {
this("sz", 19);
}
}
六、static关键字
1.修饰属性
静态成员变量(类变量)访问:类名.属性(建议);
Java静态属性和类相关, 和具体的实例无关,不需要实例化对象;
静态成员变量,不存在与对象里面,在方法区;
2.修饰方法
在任何方法上应用 static 关键字,此方法称为静态方法;
静态方法属于类,而不属于类的对象,无需创建类的实例;
静态方法可以访问静态数据成员,并可以更改静态数据成员的值;
在普通成员方法中不可以定义一个静态成员变量,如果在方法的内部,是一个局部变量,作用域在方法的内部,而被static修饰又是全局可见的,二者相互矛盾;
边栏推荐
猜你喜欢
随机推荐
EL 表达式 & JSTL 标签库
这几年让你大呼惊人的AI应用,都离不开这项技术
集成电路实践----D触发器
解决跨域问题的方法 --- CORS
数据库性能优化的误区!
GC垃圾回收ZGC
flask获取post请求参数
为什么float4个字节比long8个字节所表示的数值范围广
Mediasoup 杂谈(待完善)
UINIX 高级环境编程杂项之限制
对象头和synchronized的升级
DOM —— 事件对象
网络请求——跨域 的概念
网络运维系列:网络出口IP地址查询
Based on the SVM regression forecast 】 【 LibSVM realize the prediction of a characteristic data
webrtc 数据接收流程图解
从零开始的循环之旅(下)
tab 替换空格
静态方法的缺失
【面经】被虐了之后,我翻烂了equals源码,总结如下