循环中的常用思想
1.累加法:定义一个新的变量,让每次循环在新的变量里面进行累加
注意事项:求和的变量不能定义在循环的里面,因为变量在所属的大括号里面才有效
2.如果我们把变量定义在循环里面,那么当前变量只能在本次循环有效,当本次循环结束之后,变量就会从内存中消失,当第二次循环开始的时候,又会重新定义一个新的变量。
3.在循环中可以加入限制条件
for循环的快捷方法:结束条件.fori
数组:
基本概念:数组指的是一种容器,可以用来存储同种数据的多个值(int类型可以存放在double类型的数组中,会进行强制转换)
数组的初始化:在内存中,为数组容器开辟空间,并将数据存入容器的过程中,在内存中开辟一个地址出来,所以打印数组的时候是一串地址
完整格式:数据类型【】数组名=数据类型【】{元素1,元素2,元素3.。。}
简化格式:数据类型【】数组名={元素1,元素2,元素3。。}
索引:也叫做下标,角标
特点:从0开始,逐个+1增长,连续不间断
作用:1.获取数组里的元素
2.把数据存储在数组当中,数组名【索引】=具体数据,先前的数据一旦覆盖之后,原来的数据就不存在了
数组遍历:将数组中的所有数据取出来,遍历指的是取出数据的过程
可以利用循环来遍历数组,开始条件0,结束条件数组的长度—1
数组的长度:数组名.length
自动快速生成数组的遍历方式:数组名.fori
数组的动态初始化:初始化时只指定数组长度,由系统为数组分配初始值,我们自己指定数组的长度,由虚拟机给出默认的初始化值
格式:数据类型【数组名】=nwe数据类型【数组长度】
数组动态初始化和静态初始化的区别
动态初始化:手动指定数组长度,由系统给出默认初始化值。
只明确元素个数,不明确具体数值,推荐使用动态初始化
静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组长度,需求中已经明确要操作具体数据,直接静态初始化即可
数组的常用操作:
1.求最值:(可以形象的类似于很多人上台不断地挑战擂主)一.定义max变量类似于最开始的擂主,准备记录擂台上的变化。二.遍历数组获取每一个元素(类似不断换人上去挑战)三.让每一个元素和max进行比较,如果可以找到更大的,就让max记录该元素(擂主输了就换人,最后的就是最强的)
注意事项:max的定义初始值一定要是数组中的值,不可以是0,如果数组全是负数那么0就是最大的了
2.求和并统计数目
一.求1-100随机数random r=new random();int number=r.nextint(bound:100)+1
二:把生成的随机数添加到数组当中 数组名【索引】=数据
3.交换数组中的数据
需要用到中间变量,类似于交换两个杯子里的饮料需要第三个空杯子来过度(a到空杯,b到a,空杯到b),所以引入temp中间变量
4.打乱数据
方法:
方法是程序中最小的执行单位,将一些代码打包在一起,用到的时候直接调用,当写了方法就要执行,在实际运用中,重复的代码,具有独立功能的代码可以抽取到方法中,不用老是重复的运用,需要时调用即可,可以提高代码的复用性和可维护性
方法调用:1.普通调用:方法定义后并不是直接运行的,需要手动调用才能执行。
方法的格式:
调用方法只要在主方法中方法名()i即可调用
带参数的调用:输入的个数和调用的个数和类型需要一致,用到多个参数时用逗号隔开
形参和实参:
形参:全称形式参数,是指方法定义中的参数(如上图中的num1,num2)
实参:全称实际参数,方法调用中的参数 (如上图中主方法引用的数字)
方法定义的技巧:明确要干什么以及完成这件事需要什么,定义形参时注意题目要换的变量是什么,可以在主方法理随时换数字
带返回值的调用:
带返回值的调用可以让调用者通过方法来获取一个结果然后将这个结果不是直接出现在控制台里,有助于调用者重新利用方法算出的结果进行下一步的计算,相当于方法调用那些代码被一个结果代替了
有返回值方法的调用格式:直接调用,复制调用,输出调用
方法调用的注意事项:
1.方法不调用就不执行
2.方法与方法之间是平级关系,不能互相嵌套定义
3.方法的编写顺序和执行顺序无关
4.方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写。如果要编写return,后面不能跟具体的数据
方法的重载:
1.在同一类中,定义了多个同名的方法,这些同名的方法具有同种的功能
2.每个方法具有不同的参数类型或参数个数,这些同名的方法,构成了重载关系
3.同一个类中,方法名相同,参数不同的方法,与返回值无关,参数的个数,类型,顺序都可以不同
方法与数组的应用:
1.按顺序遍历打印数组:
注意:print和println的区别在于后者包含换一行的含义,println()不打印任何数据只做换行处理
输出语句souf,包含两部分参数,第一部分参数是要输出的内容%s来占位,第二部分参数是要填充的数据
2.找到数组中的最大值:
3. 判断数组中的某个数是否存在,将结果返回给调用处
注意:将循环全部运行完,没有发现数字89才会跳出循环返回false
return和break的区别
return和循环并没有什么关系,是和方法相关的,指挥结束方法或者返回结果,如果方法执行到了return,那么整个方法全部结束,里面的循环也随之结束。例如地球爆炸了,即使人才20岁那他也会死
break和方法没有什么关系,主要是结束循环或者switch的
4.拷贝数组数据到新数组
方法调用的基本内存原理
方法需要进栈,类似于抢里的子弹,先压进去的后打出来,所以现在最前面的main方法最后一个出栈
引用数据类型用的是其他空间的变量,存储的是地址值
面向对象
面向:拿,找;对象:能干活i的东西 面向对象编程:拿东西过来做对应的事情
比如要随机数时用random,要输出打印的时候用system。out,要输入数据的时候用scanner
面向对象类似于洗衣服找洗衣机来洗,符合人类思维习惯
类和对象
类是设计共同特征的描述(对象的设计图)
对象是真实存在的具体实例
在定义类的时候只需要输入类型即可,不用具体数据,只是用来描述一个类别的,该类别下的事物是有很多不一样的
如何得到对象:
可以通过对象.成员变量来定义赋值变量,也可以通过对象.成员方法()调用方法(行为)
类的注意事项:
1.类名首字母建议大写,英文,有意义,满足驼峰模式,不能用关键字,满足标识符规定
2.可以定义多个类,但只能有一个类是public修饰的
封装:
告诉我们然后正确设计对象的属性和需求,
对象代表什么,就得封装对应的数据,并提供数据对应的行为
在人画圆这个事件中,人只是调用了画圆的方法,实际上圆是由半径画出来的,所以在定义对象事画圆的动作应该定义在圆的类里面
在人关门的例子中,人只是给出了作用力,让门自己关上的是门,人调用了关门的方法
private关键字:
1.private关键字是一个权限修饰符
2.可以修饰成员(成员变量和成员方法)
3.被private修饰的成员只能在本类中才能访问
4.针对private修饰的成员变量。如果需要被其他类使用,需要提供setxx和getxx方法
setxx是用来赋值变量的,用来给输入的数据设置门槛
传出来的变量先用a来接受 ,再来赋值给成员变量age
getxx 是用来输出数据的,是对外暑促成员变量的,所以需要返回值
成员变量和局部变量:
成员变量是定义类时用到的变量,局部变量时定义方法时用到的变量,调用数据的时候引用就近原则,先看局部变量再看成员变量,this关键字的作用可以区别成员变量和局部变量,this本质上是所在方法调用者的地址值
构造方法的作用:创建对象的时候,用来给成员变量进行初始化(赋值),并不是创建对象,只是创建对象的其中一个步骤。
构造方法有两种:
无参数构造方法:初始化的对象时,成员变量的数据均采用默认值
小括号内没有写参数,所以默认值
有参数构造方法: 在初始化对象的时候,同时可以为对象进行赋值
构造方法的注意事项:1.任何类定义出来,默认就自带了无参数构造器
2.一旦定义了有参数构造器,无参数构造器就没有了,此时需要自己写无参数构造器
3.建议在任何时候都手动写上空参和带全部参数的构造方法
标准的JavaBean类书写标准:
把之前学到的东西需要全部用上
1.类名需要见名知意
2.成员变量使用private修饰,保证不会被轻易修改
3.至少提供两个无参构造方法和带全部参数的构造方法
4.成员方法需要提供每一个成员变量对应的setxxx和getxxx,如果还有其他行为也要加上
快捷键:ALT+INSERT /ALT+FN+INSERT
插件ptg可以快速生成JavaBean
一个对象的内存图:
1.加载class文件,加载上图student的源文件
2.申明局部变量
3.在堆内存中开辟一个空间,设置一个新的对象
4.默认初始化
5.显式初始化
6.构造方法初始化
此三步在定义变量有作用
7.将堆内存中的地址赋值给左边的局部变量
基本数据类型:是将数据存储在自己的空间中,在自己的空间开辟一个新的地方,存储的是真实的值,赋值给其他变量的时候也是赋真实的值
引用数据类型:数据值存储在其他空间中,在堆里面开辟一个新的空间,自己空间开辟的是地址值,当赋值给其他变量的时候,复制的是地址值
r1.attack(r2)意味着r1攻击r2,方法前面的是调用者,r1调用方法来作用于r2
API:应用程序编程接口,用来运用别人已经写好的东西,不需要自己编写,面向对象编程是自己写一个类,别人没有写好的东西,例如调用随机数的random,用来键盘录入的scanner
API帮组文档:帮助开发人员更好的使用和查询API的一个工具
如何使用帮助文档
1打开APl帮助文档
2 点击显示,并找到索引下面的输入
3 在输入框中输入类名并点击显示
4 查看类所在的包
5 查看类的描述
6 查看构造方法
.7查看成员方法
字符串:
string:代表字符串,Java程序中的所有字符串文字都为此类的对象,字符串的内容是不会发生改变的,它的对象在创建后不能被更改
在此场景中有两个字符串,第二行将新的name赋值给上面的字符串,产生了新的字符串,原来的并没有被修改
创建字符串的方法:
1.使用直接赋值的方式获取一个字符串对象
使用new的方式来获取一个字符长对象
2.空参构造,可以获取一个空白的字符串对象
3.传递一个字符数组,根据字符数组的内容在创建一个新的字符串对象,可以随时修改字符串的内容
4.传递一个字节数组,根据字节数组的内容在创建一个新的字符串对象,一行在网络当中传输的数据其实都是字节信息,我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造
==号的运用
1.在基本数据类型比较中,比较的是数据值
2.在引用数据类型比较的是地址值
在图一中两个字符串是在不同的堆里面开辟新的地址,所以是false
在图二中两个字符串在串池中是一样的地址值,所以是true
在图三一个是在串池开辟,一个是在堆里面开辟,所以是不一样的地址值,所以是false
比较字符串里面的内容时,用Boolean equals()方法,结果完全一样才是true,
Boolean equalslgnorecase()可以忽略大小写的比较
键盘录入的字符串和i定义的字符串不一样,因为键盘录入的算是new出来的,、
字符串练习:
1.用户登录
CTRL+alt+t可以选择逻辑来包裹代码,需要注意循环的开始结束位置,否则在循环中定义的变量在后面将无法识别,且循环容易出错
2.遍历字符串和统计数据个数