文章目录
前言
经过两天终于稍微了解了Java中的类和对象的关系了,下面让我们来探讨一下把,仅是博主本人总结,可能会有很多不足之处,希望读者可以有目的的阅读。
一、类和对象的概念
1.什么是类?
一.类在现实生活中是不存在的,是一个模板,由Java工程师抽象出来的一个结果.
二.类代表了具有同一类特征的一些事物
三.在现实生活中,假如A和B具有一些相同的特征,我们程序员可以进行抽象从而总结出一个模板,这种模板被统称为类.
2.什么是对象?
对象是现实生活种具体存在的,具有现实意义的东西.
显而易见的:
类就相当于对象的抽象化,对象就相当于类的具体表现.
3.面向对象和面向过程
1.面向对象
三大特征
封装
多态
继承
所有具有面向对象的编程语言都具有这三个特征
面向对象的分析:OOA
面向对象的设计:OOD
面向对象的编程:OOP
面向对象的优点:
1、易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
面向对象的缺点:
前期投入成本高,需要进行独立体的抽取,大量系统分析和设计
2.面向过程
面向过程的优点:
性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
面向过程的缺点:
采用面向过程的方式开发很难解决一些比较复杂的业务逻辑,面向过程会导致软件元素间的“耦合度”非常高,主要其中的一个元素出现问题,这个软件都受到影响最终导致软件的“扩展力”非常差。没有把元素独立出来,以达到重复使用,扩展力大,灵活的作用。
二、类的定义
1。类定义的基本格式
注意,基本操作和平时写代码一样,但是要定义自己想要的类名
接下来是代码实现
ublic class Student{
int age;
String name;
boolean sex;
String add;
}
其中int,boolean为基本数据类型
而String为引用数据类型,为sun公司自己定义的,不需要我们idea用户自己去定义这个类型
其中的年龄,姓名,性别和地址都不能通过类去访问,所以这种成员变量又被称为:实例变量
2.对象的访问
想要访问一个类里面的对象,就必须要创建一个新对象,需要用到new运算符开辟空间,在JVM堆内存中储存
如:
Student a=new Student();
//new 类名()
//new是Java语言当中的一个运算符
//new的作用是创造对象,在JVM堆内存中开辟新空间
当我们想要访问类中对象的某个特征时,可以这样
int x= a.age;
//引用.对象
//前往不能通过类直接访问对象,程序会报错
还可以进行修改,如
a.age=18;
但是我们不能通过类名直接访问
System.out.println(Student.age);
这样系统是会报错的
我们还可以在定义的类里面定义已经定义的类,如:
public class Student{
int age;
String name;
boolean sex;
String add;
}
public class A{
Student s;
}
要是想访问Student里面的属性时间,可以这样
Student a=new Student();
A b=new A();
A.b=new Student();
System.out.println(A.b.age);
System.out.println(A.b.name);
System.out.println(A.b.sex);
System.out.println(A.b.add);
这样就可以在类里面访问定义的类啦!
在上面这些代码中Student和A是引用数据类型
而b是是一个引用变量,保存了Java中我们自己定义的类的地址
三、类与对象的内存分析
1.定义理解
- JVM (Java虑拟机)主要包括E块内存空间.分别是:栈内存、堆内存、方法区内存。
2.堆内存和方法区内存各有1个。-个线程一个栈内存。
3.方法调用的时候.该方法所需要的内存空间在栈内存中分配,称为压栈。方法执行结束之后,该方法所属的内存空间释放s称为弹栈。4、栈中主要存储的是方法体当中的局部变量,
5.方法的代码片段以及整个类的代码片段都披存储到方法区内存当中,在类加多的时候这些代码片段会载入。
6.在程序执行过程中使用new运算符创建的java对象,存储在堆内存当中。对象内部有实例变量,所以实例变量存储在堆内存当中。
7.变量分类:
-局部变量[方法体中声明]
-成员变量[方法体外声明]
*实例变量[前边修饰符没有static]
*静态变量[前边修饰符中有staticl
8.静态变量存储在方法区内存当中。
9.三块内存当中变化最频繁的是栈内存。最先有数据的是方法区内存,垃圾回收器主要针对的是堆内存。
10.垃圾回收器[自动垃圾回收机制、GC机制]什么时候会考虑将某个java对象的内存回收呢?
*当堆内存当中的java对象成为垃圾数据的时候,会被垃圾回收器回收。
*什么时候堆内存中的java对象会变成垃圾呢?
没有更多的引用指向它的时候。
这个对象无法被访问,因为访问对象只能通过引用的方式访问。
2.实操
接下来我们通过画图来理解一下
先给出完整代码
public class lei01 {
public static void main(String[] args) {
/*类的定义:
[修饰符列表] class 类名{
属性;
方法;
}
*/
Student a=new Student();
a b=new a();
a.b=new Student();
System.out.println(a.b.age);
System.out.println(a.b.name);
System.out.println(a.b.sex);
System.out.println(a.b.add);
}
}
public class Student{
int age;
String name;
boolean sex;
String add;
}
public class a{
Student s;
}
接下来我们画图模拟一下
当我们未初始化的时候,系统默认将int类型定义为0,string类型定义为null,
boolean定义为false
可以理解为套娃模式
一层套一层,最终找到定义的类中的对象
3.理解
1、每次创建对象时,都需要进行加载和创建2个操作:
① 先去判断需要的类是否已经加载,如果已经加载了,则无需再加载,如果没有加载,则需要通过类加载器加载类信息到方法区
② 在堆中创建新对象
2、栈、堆、方法区的存储
栈:对象的引用、局部变量
堆:对象和全局变量(属性)
方法区:类信息、属性信息、方法信息
3、方法的调用机制
每次调用方法,伴随着“方法入栈”操作,也就是栈中为该方法分配了一块空间,用于保存该方法中涉及到的变量
每次方法调用结束,伴随着“方法出栈”操作,也就是栈中分配的空间被释放了
在类的方法调用过程中,首先判断方法区是否存在该方法,存在则方法入栈,调用结束后出栈。
总结
以上便是我对Java的类和对象的理解,其中有些内容借鉴于他人还望大家理解,最后祝大家天天快乐,生活愉快