A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Day04
Random与一维数组介绍

随机数(Random)
用于产生随机数.
使用步骤:
1.导包
importjava.util.Random;
2.创建对象
Randomr = new Random();
3.获得随机数
intnumber = r.nextInt(10);
获取数据范围:[0,10)包括0,不包括10

Random猜数字游戏:
问题:产生1~100随机数,猜出
分析:
1.intnumber = r.nextInt(100)+1;
2.录入猜的数据
3.用if语句来比较
4.要实现多次猜数据,因为不知道要猜多少次,所以使用"死循环"while(true).

数组(array)
存储同一数据类型的多个元素的容器.
定义格式:
1:数据类型[] 数组名;(推荐)
int[]arr;
2:数据类型 数组名[];
intarr[];

数组初始化:为数组开辟内存空间,并为数组中的每个元素赋予初始值

1.动态初始化:只给出长度,由系统给出初始化值
格式 : 数据类型[] 数组名 = new 数据类型[数组长度]
数组中的每个元素都是有编号的,从0开始,最大编号就是数组的长度-1
编号 就是数组的 索引(|角标)

获取数组中数据,使用 数组名[索引] 来找到索引位置的数据

栈:储存的是局部变量
局部变量:就是定义在方法中的变量
使用完毕,立即回收

堆:存储的是new出来的东西
每个对象都有地址值
每个对象的数据都有默认值
byte,short,int,long: 0
float,double: 0.0
char: '\u0000'
boolean:  false
引用类型 : null
使用完毕后会在垃圾回收器空闲时回收

定义两个数组,把第一个数组的值赋值给第二个, 其实是第一数组的地址值赋值给了第二个 ,通过地址值,两个数组指向同一个堆内存里的数组空间. 两个数组中元素的改变是共享的.

2.静态初始化:给出初始值,由系统决定长度
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3,...};

数组操作中的两个小问题:
1. ArrayIndexOutOfBoundsException:数组索引越界异常
产生原因:访问了不存在的索引

2.NullPointerException:空指针异常
产生原因:数据已经不在指向堆内存的数据了
避免方法 if(arr != null){}

数组操作之遍历数组(依次输出数组中的每一个元素)
1. 通过for循环实现
2. 通过 length 获取数组元素的个数
格式: 数组名.length

数组操作之获取最值
1. 先拿一个数组元素作为参照物
2. 遍历数组让后面所有的元素一次和参照物就行比较;
如果元素比参照物大就留下
3.最后的即最大值


二维数组:元素为一维数组的数组
定义格式:
1.数据类型[][] 数组名; (推荐格式)
2.数据类型 数组名[][];
3.数据类型[] 数组名[];
初始化:
1.动态初始化
数据类型[][] 数组名=new 数据类型[m][n]
m表示二位数组中一维数组的个数
n表示一维数组中的元素个数
2.静态初始化
数据类型[][] 数组名=new 数据类型[][]{{元素,元素..},{元素,元素..},{元素,元素..},...}
简化格式:
数据类型[][] 数组名={{元素,元素..},{元素,元素..},{元素,元素..},...}

获取二维数组中元素
数组名[索引][索引] : 第一个索引指向相应一维数组; 第二个索引指向一维数组中元素
int[][]arr = new int[3][]; [null,null,null]
二维数组的遍历:
二维数组.length 获取的就是二维数组中有几个一维数组

扩展内容:
可以创建长度为0的数组,不能存储数据;
不能创建长度为负数的数组;
长度为0的数组有地址值,和null不同

数组的长度一旦确定则不可改变

Day05
方法的概述以及基本的使用
格式:
修饰符 返回值类型 方法名(参数类型 参数名1 , 参数类型 参数名2…);
方法体;
return 返回值;
}

方法是为了提高代码的重复使用性和可维护性.

(String[] args)中的String[]是字符串数组

写一个方法有两个明确:
1.返回值类型 明确功能结果的数据类型
2.参数列表 明确有几个参数以及参数的数据类型

方法的调用:
有明确返回值的方法调用:
1.单独调用, 没用意义
2.输出调用, 有意义, 但不够好,因为可能需要拿结果进行进一步的操作
3.赋值调用, 推荐方式

void修饰的方法 (void并不是一个数据类型,所以" void 变量名 "的写法是错误的)
如果一个方法没有明确的返回值类型,也不能把返回值类型的地方空出来,应用void表示该方法无放那绘制类型.

void修饰方法的调用:
void修饰的方法只能单独调用

void作为返回值类型的方法,可以不写return语句, 也可以写 " return; ",但是不能写 " return(变量); "

文档注释:
/** >> 回车
用在方法定义的上方

方法的重载以及参数传递
方法重载(Overload):
在同一个类中,可以出现方法名相同的情况.
特点:
方法名相同,参数列表不同.与返回值无关.
参数列表不同是什么?
1.参数个数不同;
2.参数对应的类型不同
3.包括数据类型相同,但是参数列表的顺序不同:
public static int sum(int a , byte b){}
public static int sum(byte a , int b)
不能出现方法名相同,并且参数列表也相同的情况.
注意: 在调用方法的时候,Java虚拟机会通过参数列表的不同来识别方法

方法的参数 如果是基本数据类型:形式参数的改变不影响实际参数.
实际参数:
形式参数:

如果方法的形式参数是引用数据类型(数组;类..)
形式参数的改变会影响实际参数 (但是只是修改方法中的引用就不会影响)

扩展:
方法返回值类型是void时,
return; 可以终止方法

栈 : 先进后出,后进先出 , FILO(First In Last Out)
队列: 先进先出,后进后出, FIFO(First In Frist Out)

Day06
Eclipse断点调试(debug)程序
作用:
1.查看程序的执行流程
2.调试程序
断点:
其实就是一个标记
怎么添加:
在行号上双击
运行断点程序:
代码区域>>右键>>Debug AS>>java Application
出现是否进入debug视图的提示,yes
点击F6(stop over)往下执行
需要看的区域:
代码区域:看程序的执行流程
debug区域:看程序的执行流程
Variables:变量的变化
Console:看程序的输入和输出
如何去掉断点:
1.把添加的动作重复一下
2.删除多个断点: 断点(Debug)视图 >> Breakpoints >> 选中 >> 双×关闭
* 断点必须加在有效的语句上
要想看被调用方法的执行流程,调用方法必须加断点

Day07
面向对象的概述
基于面向过程的编程思想.
面向过程:强调每一个功能的步骤
面向对象:强调的是对象,然后又对象调用功能.
产生这个概念的原因:
当需求和功能增多是,想要通过一种方式将相似的功能归类到一起,减少重复代码编写,提高代码的复用性
特点:
1.是一种更符合我们思考习惯的思想
2.可以将复杂的事情简单化
3.将我们从执行者变成指挥者
类和对象的关系:
java语言的最基本的单位是类
类描述同一类"事物"的"属性"和"行为"
属性:事物有什么
行为:事物能做什么
对象:
一类事物的具体的一个体现
定义一个学生类:
学生事物:
属性:姓名,年龄
行为:学习,吃饭
属性即成员变量;行为即成员方法
成员变量:和之前变量的定义一样
但位置不同:在类中,方法之外;
也不需要给初始化值;
成员方法:和之前方法的定义一样,
但是去掉static
创建对象:
格式: 类名 对象名 = new 类名();
对象如何访问成员:
成员变量: 对象名.变量名
成员方法: 对象名.方法名(...)

面向对象的内存图与封装
成员变量和局部变量的区别:
1.在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
2.在内存中的位置不同
成员变量:堆内存
局部内存:占内存
通过对象直接访问成员变量,会存在数据安全问题
这时不能让外界直接访问成员变量:
实现方法:
private 权限修饰符,可以修饰类,变量,方法.
private 关键字:
1,是一个权限修饰符.
2,可以修饰成员(成员变量和成员方法)
3,被private修饰的成员只有在本类中才能访问
private最常见的应用
1.把成员变量用private修饰
2.提供对应的getXxx()/setXxx()方法
封装:
和继承;多态是面向对象的三大特征之一
面向对象之构造方法

this关键字
如果局部变量名和成员变量名相同,在局部使用时,采用的是就近原则. 使用this关键字解决.
this: 代表所在类的对象的引用
this 只能出现在方法中,那个对象调用了该方法,this就代表哪个对象.
什么时候用this:
成员变量和局部变量重名时
构造方法:
作用:给对象的数据进行初始化
格式:
方法名和类名必须相同
没有给返回值类型,连void都不能写
没有返回值,(但实际是返回的是创建的该类的对象)
调用: 通过new关键字调用
格式: 类名 对象名 = new 构造方法(...);
构造方法的注意事项:
1,如果我们没有给出构造方法,系统将会提供一个默认的无参构造方法供我们使用
2,如果我们给出了构造方法,系统将不在提供无参构造方法,如需使用,需要自行创建(推荐自建)
3.构造方法可以重载
成员变量的赋值:
1,setXxx()方法
2,带参构造方法




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马