java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用

本文深入讲解Java中的类与对象概念,探讨权限修饰、构造方法、简单Java类的创建,以及数组的定义和使用。从面向对象的发展历史入手,介绍封装、继承、多态等特性,详解类与对象的关系,构造方法的特性,以及数组的各种操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用

七十年代,IBM的Smalltalk语言最先推广面向对象,后来C语言变为C++,后来C++又产生了Java。
面向对象是一种技术的开发模式,但是最早的时候所使用的模式是面向过程。
面向过程:指的是对于某一个问题单独提出解决方案以及代码开发。
面向对象:以一种组件化的形式进行代码的设计,这样开发出来的代码有一个最大的好处是可以重复使用。

面向对象的特性:

封闭型:保护内部的定义结构安全性;

继承性:在已有的程序结构上继续扩充新的功能;

多态性:指的是对象在某一个概念范围的满足不同的变换。

学习步骤:OOA(面向对象分析),OOD(面向对象设计),OOP(面向对象编程)。

类与对象

类与对象是整个面向对象之中最为基础的组成单元。
类包括属性和行为,对象所能操作的行为都是由类来决定的,不能超过类定义范畴操作,
类实际上是对象对象操作的模版,但是类不能直接使用,必须通过实例对象来使用。

对象由类产生

类与对象的基本定义

如果在程序中定义类可以使用“class类名称{}”的语法结构完成,而类之中的组成主要有:

Field(属性,成员),就是变量
Method(方法,行为),之前见到的方法,但是此时的方法是由对象调用的。

想使用类必须要有对象,那么对象的定义格式
声明并实例化对象:类名称 对象名称 = new 类名称();
分步完成:
声明对象:类名称 对象名称 = null;
实例化对象:对象名称 =new 类名称();
只要是引用数据类型想使用,那么就必须使用关键字new来开辟内存空间。
两块内存空间的概念:
栈内存:保存一块堆内存的地址,但是为了分析方便,可以简单理解栈内存保存的是对象名字,其实还是一个地址并指向一块堆内存
堆内存:保存每一个对象的属性内容 ,堆内存需要用关键字new才可以开辟(99%的情况下)
在运行时使用没有实例化的类对象,程序会出现“NullPointerException”(空指向异常),只要是引用数据类型都有可能出现。

引用数据的初步分析

引用是整个java开发之中的核心精髓所在,需掌握这一基础概念
引用类似于C++中的指针概念,但是要比指针概念更加的简单。
引用粗略的说,同一实体有多个名字,在java中一块堆内存可以被多个栈内存指向。一个栈内存只能指向一块堆内存,当一块堆内存没有任何一个栈内存指向它时将被GC(垃圾收集器)回收并释放(清空)。
堆内存保存的是对象所有属性的内容,而栈内存保存的是堆内存的地址数值。
内存的分析

1,封装性

封装性主要体现在权限修饰符:只有四种(其中default为默认的,可以不写出来)如下:

权限修饰符

- private(私有的)

private可以修饰成员变量,成员方法,构造方法,不能修饰类(此刻指的是外部类,内部类不加以考虑)。被private修饰的成员只能在其修饰的本类中访问,在其他类中不能调用,但是被private修饰的成员可以通过set和get方法向外界提供访问方式

  • default(默认的)
    defalut即不写任何关键字,它可以修饰类,成员变量,成员方法,构造方法。被默认权限修饰后,其只能被本类以及同包下的其他类访问。
- default(默认的)

defalut即不写任何关键字,它可以修饰类,成员变量,成员方法,构造方法。被默认权限修饰后,其只能被本类以及同包下的其他类访问。

- protected(受保护的)

protected可以修饰成员变量,成员方法,构造方法,但不能修饰类(此处指的是外部类,内部类不加以考虑)。被protected修饰后,只能被同包下的其他类访问。如果不同包下的类要访问被protected修饰的成员,这个类必须是其子类。

- public(公共的)

public是权限最大的修饰符,他可以修饰类,成员变量,成员方法,构造方法。被public修饰后,可以再任何一个类中,不管同不同包,任意使用。

注意:1,封装性就是保证类内部的定义对外部不可见。
2,所有属性都必须使用private封装,封装后的属性如果要被外部所访问,要定义setter和getter方法。

构造方法

现在我们已经清楚了对象的产生格式:
类名称 对象名称 = new 类名称();
类名称:规定了对象的类型,即:对象可以使用那些属性与那些
对象名称:如果要想使用对象,需要有一个唯一的名字;
new:开辟新的堆内存空间,如果没有此语句,对象无法实例化
类名称() :调用一个和类名称一样的方法,这就是构造方法。
例:public book() {
String name = null;
}
构造方法无返回值
构造方法与普通方法的最大区别:
构造方法是在实例化新对象(new)的时候只调用一次。
普通方法是在实例化对象产生之后可以随意调用多次。
构造方法可以重载,重载的方法请按照参数的个数进行升序或降序排列。
对象实例化的过程中,一定会经历类的加载,内存的分配,默认值的设置,构造方法。
**没有栈指向的对象就称为匿名对象。**真实信息都保存在了堆内存空间。只使用一次,之后被gc回收。
例:new Book(“Java开发,89.9”).getInfo();

简单java类

第一种开发形式:(很少使用)
1,类名称必须有意义,例如:Book,Emp;
2,类之中所有属性必须private封装,封装后的属性必须提供有setter,getter方法。
3,类中可以提供任意数量的构造方法,但是必须保留有一个构造方法。
4,类之中不允许出现任何的输出语句,所有信息输出必须交给被调用。
5,类中必须提供有一个取得对象完整信息的方法,暂定为getInfo(),而且返回String型数据;
部分代码如下:(不重要)
简单java类

数组

1,数组的基本作用与定义语法:
2,二维数组的使用;
3,数组与方法的互操作
4,与数组有关的类库方法实用;
5,对象数组。
数组就是一组相关变量的集合
数组的定义语法如下
声明并开辟数组:
数据类型 数据名称[] =new 数据类型[长度];
分步完成:
声明数组:数据类型 数组名称[] =null;
开辟数组:数组名称 =new 数据类型[长度];
数组开辟空间后,可以采用“数组名称[下标索引]”的形式进行访问索引是从0开始的。
例如:int data[]=new int[3];
for(int i=0;i<data.length();i++){
data[i]=i*10+10;
}
则data[]={10,20,30}。

数组也是引用数据类型
数组data[]的内存分布如下:
数组的内存分布
简化格式:
格式一:数据类型 数组名称[] ={值,值,…};
格式二:数据类型 数组名称[] =new 数据类型{值,值,…};
静态数组初始化
工作中大部分是通过传递的数据而动态生成,很少先开辟数组再去使用。

二维数组(很少用)

在之前的数组只有一个”[]“此类数组就是一个普通的数组,或者再想描述更多的数据,可以使用二维数组,后面会是”[][]“。

数组的排序

数组的排序

数组的转置(首位交换)

下面首先来解释一下转置的概念(一维数组实现):
原始数组:1,2,3,4,5,6,7,8;
转置后的数组:8,7,6,5,4,3,2,1。
不管是数组的长度是奇数还是偶数转置次数都是数组的长度除2,因为int型去尾,
数组的转置
数阵的转置(了解)
数阵的转置

数组操作方法

java对于数组有类库的支持:
1,数组拷贝:可以将一个数组的部分内容拷贝到另外一个数组之中;
语法:System.arraycopy(源数组名称,源数组拷贝开始索引,目标数组名称,目标数组拷贝开始索引,长度)
例:
数组拷贝

数组的排序

例:java.util.Arrays.sort(data);//排序操作
数组的排序

对象数组(重点)

定义对象数组如下
(以类为例)动态初始化(最初都为null,可变)

声明并开辟对象数组:
类名称 对象数组名称[] =new 类名称[长度];
分步完成:
声明对象数组:类名称 对象数组名称[] =null;
开辟对象数组:对象数组名称=new 类名称[长度];
对象数组动态初始化如下
对象数组动态初始化

静态初始化

类名称 对象数组名称 []=new 类名称[] {实例化对象,实例化对象,…}
关于数组的总结如下:
关于数组的总结

@沉木

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值