面向对象设计(上)

类和对象

类:抽象的 指某一类事物 类似于汽车设计图纸
对象: 具体的 值某一个具体的个体 类似于真实的一辆辆汽车
创建对象:利用new +类进行创建

相关练习

创建一个类Dog 包括name age weight kind color并创建一个方法将相关信息打印出来
在这里插入图片描述

对象在内存中的流程

计算机如何进行对象的创建呢?在这里我们简单了解一下
在这里插入图片描述
可以看到,这里面我们有一个名为Car的对象,这里的c1 c2为Car对象的引用,存在栈中;又因为new后为Car,这里的Car就存在了堆中。
由于有两个new,所以堆中开辟了两块空间。gvm在堆中开辟空间的同时会给空间赋予一个相应的16进制地址值,通过赋值运算符“=‘把堆中的地址值赋值给引用对象c1 c2
又通过c1.name 等操作通过地址找到了c1对应的堆中的空间,并对其name进行了修改
这就是对象在内存中的存储流程,有不严谨的地方请指正!

对象的属性特点

成员变量和局部变量

成员变量:又叫 属性 实例变量
成员变量和局部变量的区别:①作用域不同:成员变量作用于整个类中 局部变量作用于具体的方法中
②内存的位置不同:成员变量存储于 堆中 局部变量存储于 栈中
③成员变量有默认的初始值 局部变量没有默认的初始值

成员变量默认的初始值(缺省值):

基本数据类型:
int short byte—>0
long—>0L
double—>0.0D
float—>0.0F
char—>‘\u0000’
boolean—>false

引用数据类型:---->null
|–类(class)
|–接口(interface)
|–数组([ ])

成员变量赋初始值的方式:

①默认值
②直接显示初始值 即在创建成员变量的时候直接进行赋值 如Dog类的局部变量 String name=“虎子”

java内存管理与垃圾

内存分配:gvm自动进行内存的分配
内存释放:gvm中的垃圾回收机制自动释放内存空间
垃圾回收机制:将内存中的垃圾对象进行释放
内存垃圾:不再被任何引用指向的对象 例如Dog sam=new Dog(); sam=new Dog() 这里面第一个Dog对象不再被sam进行引用,所以系统自动把第一个Dog的内存空间进行了释放

参数的值传递(基本数据和引用数据)

只要方法运行,参数必定有值

基本数据类型:

基本数据类型作为变量传递给方法,当方法运行完毕后,原本的值不发生改变
在这里插入图片描述

引用数据类型:

引用数据类型作为变量传递给方法时,方法运行完毕后,原本的值发生改变
在这里插入图片描述

参数的值传递练习

要求:创建一个ValueTest类和circle类,实现:
①circle类中创建一个findarea方法,得到对应圆的面积
②ValueTest中创建printlnarea方法,并传入半径radius和半径的最大值,依次计算和打印对应的圆的面积
注意:当定义方法中没有static时,main还需创建一个新的对象进行对应方法的引用
在这里插入图片描述

封装

封装的作用:使得一些类只能通过类中定义的方法进行赋值,防止发生属性所赋的值混乱
访问控制修饰符:
①public 公共的 可以修饰属性 方法 类 在任何地方被访问
②private 私有的 可以修饰 属性 方法 只可以在本类中被访问
封装的步骤:①类的属性私有化
②写出一些列public 的set get方法

在这里插入图片描述

由图可见,当把类中的属性私有化后,不再可以通过引用对象.属性 的方法对其成员变量进行赋值了
在这里插入图片描述
在这里插入图片描述

但是我可以利用类中定义的public 类的set和get方法进行成员变量的赋值和获取

this关键字

用于本类中 用于修饰 属性和方法和构造器
作用:用于区分对象成员变量和局部变量
this修饰的对象:谁让拥有this关键字的方法运行了,谁就是this修饰的对象

练习

在这里插入图片描述
在这里插入图片描述

构造器

Ⅰ构造器:又叫构造方法 是类 成员的一种

Ⅱ构造器的格式:
访问控制修饰符 类名 (参数列表){
//功能语句
}

Ⅲ 构造器注意事项:
①构造器名称和类名必须相同
②当一个类中无显示的任何构造器时,系统会提供一个默认无参的构造器
③当一个类中由显示的 任何构造器时,系统不再提供默认的无参构造器
④构造器只可以在创建对象时使用一次
⑤构造器可以进行重载

Ⅳ构造器的重载:
在同一个类中: ①构造器名称相同 ②参数列表不同

Ⅴ构造器的作用:①创建对象
②对 对象进行初始化

属性的赋值方式

①默认值(缺省值)
②直接显化赋值
③构造器进行赋值
复制顺序:①>②>③
在这里插入图片描述
在这里插入图片描述
可以看到,这里创建了一个构造器,传入了String和int类型的变量,当系统创建child对象时,构造器中的属性赋值和方法均执行了 后来对年龄运用方法进行了一个新的赋值,并运用方法对其进行了新的打印

this调用本类构造器

当构造器中有相同的部分时,可以运用this(参数一,参数二)调用已经定义好的构造器,这里面相同的部分就由this调用的构造器代替了 ,只需要写出多出来的代码即可

注意事项:①使用this调用构造器时,this调用必须使用在新建构造器可执行代码的第一行
不可以在两个构造器中相互调用,实现递归构造器的调用

包的作用与package

包的管理:①区分重命名
②控制访问权限
③可用于划分项目层次通常将功能相同的类放到一个包中
package:用于确定当前类的位置:
①必须声明在当前.java源文件可执行代码的首行
②如果声明了包的路径com.域名等,必须在当前路径下才可以执行java源文件

import

用于确定需要引入类的位置:
①:使用在package和class之间
②:import可以导入多个包,并排列出即可
③:import java.util.* 表示导入util包下的所有类名和接口,但是不包括包
④:若在同一个类中:有两个相同类名,分布于不同的包名中 java.util.date java.sql.date
解决办法:选择一个包进行导入 另外一个类名采用全限定类名的方式导入、

数组

一维数组

数组的声明

一维数组的声明:
数组类型 [] 数组名=new 数组类型[数组元素个数]
例如int[] arr=new int [5];

数组的遍历

一维数组的遍历:for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}

二维数组

二维数组的声明

数组类型 [] []数组名=new 数组类型[行数][列数]
例如 int[][] brr=new int[10][5]这里就是一个10行5列的数组

二维数组的遍历(1)

二维数组遍历采用双层循环的形式,外层循环控制行遍历 内层控制列遍历
例如 for(int i=0;i<brr.length;i++){
for(int j=0;j<brr[i].length;j++){
System.out.println(brr[i][j]);}
}

二维数组的遍历(2)

for(int[] newarr:brr){
for(int element:newarr){
System.out.println(element);
}
}

数组的值复制

数组为引用数据类型,所以如果直接采用int[] arr2=arrr1;的方法,系统会把arr1的地址传给arr2,当改变arr2时,堆中的数据也就会发生改变,即arr1中的数据发生了改变;
在这里插入图片描述
正确的数组复制方法,创建一个新的和原数组长度相同的数组对象,在利用循环把数组中的元素逐一进行赋值;
在这里插入图片描述

数组排序

冒泡排序

外层循环控制排序的次数,n个数排序(n-1)次
内层循环控制每次排序的次数,第m次排序(n-1-m)次
代码如下:在这里插入图片描述

直接选择排序

直接选择排序是从第一个数开始依次和后面的数对比,直到比到最后一次
然后再从第二个数开始比较,以此类推
代码如下:在这里插入图片描述

可变参数方法

当我们创建方法时,参数列表可以传递可变参数 即传递0-n个相同类型的参数 ,例如public static int add(int … number) 就是传递0-n个int类型的参数

可变参数的注意

可变参数本质上是数组,所以参数列表是可变参数的方法和参数列表是数组的方法不构成重载,同样的也不可同时定义
可变参数位于参数列表的最后,即参数列表里可以有其他参数传递在可变参数前,例如public static void dayin(int a,String…str)参数列表就由一个int型的参数和若干个String的参数构成在这里插入图片描述

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值