本次博客写自10.7 (假期的最后一天真舍不得)祝大家国庆快乐 (今天的博客内容包括了3天学习内容)
这次的博客做一些改变 我会直接把大纲列入标题 这样更清晰易懂一些 在知识点方面我会更加简洁
以实际例子说话 不在更多的通过文字叙述
首先我们来学习 循环
我们为什么引入循环?
答:很简单,因为在实际生活中我们有时候需要重复做某一件事情,而Java又是一门面向对象(实际生活)的语言
也是为了不让代码过度复杂 看起来简洁明了 所以我们引入循环让计算机代替我们工作。
接下来介绍一下我们主要学习的循环结构
for循环 while循环 while语句 do…while语句 其中我们用的最多的就是for循环
for循环
for循环的格式:for(初始化表达式语句;判断条件语句;控制条件语句) {
循环体语句;
}
下为图例
for循环的注意事项a:判断条件语句无论简单还是复杂结果是boolean类型。
b:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
c:一般来说:有左大括号就没有分号,有分号就没有左大括号
-------------------------------------------------------------------------------
while循环
while循环的格式
while(判断条件语句) {
循环体语句;
控制条件语句;
}
下为图例
while语句的注意事项:
条件初始话必须放在while外面
大括号里面必须含有控制条件语句
----------------------------------------------------------
do--while语句
do---while的格式:
初始化条件语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
下为图例
do---while的注意事项:
同while语句一样初始化变量得放在外面
其次无论判断条件是否执行都会将循环体执行一次
------------------------------------------------------------
注意:A:一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
B:两种最简单的死循环格式
while(true){...}
for(;;){...}
接下来我们了解一下控制跳转语句
A:什么是控制跳转语句
前面我们已经说过了,Java中的goto是保留字,目前不能使用。虽然没有goto语句可以增强程序的安全 性,但是也带来很多不便,
比如说,我想在某个循环执行到某一步的时候就结束,现在就做不了这件事情。
为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断。
B:控制跳转语句的分类
break 中断
continue 继续
return 返回
C:break的使用场景
(1):在选择结构switch语句中
(2):在循环语句中
注意:离开使用场景的存在是没有意义的
D:作用
a:退出单层循环
b:退出多层循环(几乎不使用)
要想实现这个效果,就必须知道一个东西;带标签的语句;
格式:标签名:语句
下为图例
在这里再次强调一下3个转移语句的功能:
return: 结束当前方法
break: 结束单层循环
continue: 结束当前循环,执行下一次循环
接下来我们学习的一个重点——方法(此部分需要的是理解)
A:为什么要有方法
假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹(植物大战僵尸)。
发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差。
为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码起个名字,
这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法,
程序在需要发射炮弹时调用该方法即可。
B:什么是方法
方法就是完成特定功能的代码块
在很多语言中都有函数的定义,但是在咱们JAVA语言中,我们将其称之为方法。
C:方法的格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ....){
方法体;
return 返回值;
}
D:方法的格式详细说明
(1): 修饰符 比较多,后面会详细介绍。目前使用 public static
(2): 返回值类型 用于限定返回值的数据类型
(3): 方法名 就是一个名称,它的存在是为了方便我们调用方法
(4): 参数类型 限定调用方法时传入参数的数据类型
(5): 参数名 是一个变量,接收调用方法时传入的参数
这个参数其实有一个专业的名词,被称之为形式参数,它的作用是用来接收实际参数的.
(6): 方法体 完成功能的代码
(7): return 结束方法以及返回方法指定类型的值
(8): 返回值 就是功能的结果,由return带回,带回给调用者
上图这是个很简单的利用方法求和的例子
对于上图有几点需注意
1、没有void,意思是指没有返回值 需设定参数
2、int a int b int c为形参 在后续我们会再次学习
3、return为返回值 返回sum这个数字 需在主函数重新定义变量接收
接下来我们学习一下方法重载
方法重载概述
方法重载的定义:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同,与返回值无关。
图示
方法重载的条件:
A:参数个数不同
B:参数类型不同
关于方法我们先学习到这里,然后我们再来接触一个新的概念 数组
我们为什么要有数组?
在多个数据面前 我们需要不停的定义变量 这样很麻烦 所以java为我们提供了数组这个功能
数组是什么?
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型(后面讲解)。
一维数组的定义格式:
int[] a; 定义了一个int类型的数组a;
int a[]; 定义了一个int类型的a数组;
注意数组需要初始化 而初始化有多种方式 我们图示解读2种常用
为了将数组与方法结合我们做个例子 求数组中的最大值
如下图
在讲解二维数组之前我们需要了解一个概念 内存的分配
内存的分类
A:栈: 存放的是局部变量
局部变量:在方法定义中或者方法声明上的变量都是局部变量。
B:堆: 存放的是所有new出来的东西
特点:
a: 每一个new出来的东西都会为其分配一个地制值。
b: 每一个变量都有一个默认的值
byte,short,int,long -- 0
float,double -- 0.0
char -- '\u0000'
boolean -- false
引用数据类型 -- null
c: 使用完毕就变成了垃圾,等待垃圾回收器对其回收
C:方法区:(面向对象部分讲解)
D:本地方法区:(和系统相关)
E:寄存器:(cpu使用)
在后面面向对象中我们会画图深入理解内存图 再次提及一下
接下来我们来看看二维数组
二维数组的初始化:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例: int[] arr = new int[]{1,2,3};
同样二维数组有多钟初始化方式我们只解释常用的几种
解释上图
上图首先介绍了2种常用二维数组的定义方式
其次我们需要注意几点 二维数组中第一个【】代表“几个一维数组”如上图的int【5】【】
表示的是数组a中含有5个一维数组 第二个【】则代表一位数组的地址 举个例子int【5】【】
中第二个括号就是5个一维数组的地址
为了理解再次图示
接下来我们了解一下递归
A:递归概述: 方法定义中调用方法本身的现象
B:递归注意事项
要有出口,否则就是死递归
次数不能太多,否则就内存溢出
我们引用递归来看斐波那契数列
接下来的内容非常重要-----我们要理解面向对象的思想
面向对象的概念(此部分文字内容较多)
A:面向过程思想概述
我们来回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。
一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
面向过程的代表语言:C语言
B:面向对象思想概述
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。
可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了。这时就开始思索,
能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。
这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
C:面向对象思想特点
a:是一种更符合我们思想习惯的思想
b:可以将复杂的事情简单化
c:将我们从执行者变成了指挥者
角色发生了转换
类与对象的概念与特点
A:我们学习编程是为了什么
我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。比如:去超市买东西的计费系统,去银行办业务的系统。
B:我们如何描述现实世界事物
举例: 描述学生事物
姓名 , 年龄 , 性别 ....
学习 , 吃饭 , 睡觉 ....
属性: 就是该事物的描述信息
行为: 就是该事物能够做什么
我们学习编程语言,就是为了模拟现实中的事物,我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。
由此我们就得到了现实中的事物和类的对应关系
事物 类
属性 ----------------- 成员变量
行为 ----------------- 成员方法
C:定义类其实就是定义类的成员(成员变量和成员方法)
a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
D:类和对象的概念
a:类:是一组相关的属性和行为的集合
b:对象:是该类事物的具体体现
c:举例:
类 学生
对象 班长就是一个对象
匿名对象
A:什么是匿名对象
就是没有名字的对象
B:匿名对象应用场景
a:调用方法,仅仅只调用一次的时候。
b:匿名对象可以作为实际参数传递
封装的思想
A:封装的引入
通过学生案例,给年龄赋值为负数引出数据问题。
然后通过private解决这个问题。最后说其实这就是封装。
B:封装概述
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
C:封装好处
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
D:封装原则
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
private关键字
private关键字特点
a:是一个权限修饰符
b:可以修饰成员变量和成员方法
c:被其修饰的成员只能在本类中被访问
this关键字
A:为什么要有this
当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题
B:this关键字特点
是当前类的对象引用。
简单的记,它就代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁
在接下来的图示中我们会用实际例子去体会
public class Object {
private String personname;
private int personage;
private double phoneprice;
public Object(){
}
public Object(String personname,int personage,double phoneprice){
this.personname=personname;
this.personage=personage;
this.phoneprice=phoneprice;
System.out.println(personage);
System.out.println(personname);
System.out.println(phoneprice);
}
public String getPersonname() {
return personname;
}
public void setPersonname(String personname) {
this.personname = personname;
}
public int getPersonage() {
return personage;
}
public void setPersonage(int personage) {
this.personage = personage;
}
public double getPhoneprice() {
return phoneprice;
}
public void setPhoneprice(double phoneprice) {
this.phoneprice = phoneprice;
}
}
以上为定义的类的代码
下为测试代码图
以上的内容其实含有一些接下来要学习的内容
接下来的内容依旧是重点 -----构造方法
A:构造方法概述和作用
创建对象,给对象中的成员进行初始化
B:构造方法格式特点
a:方法名与类名相同
b:没有返回值类型,连void都没有
c:没有具体的返回值
static关键字
static关键字的特点
a:随着类的加载而加载
b:优先于对象存在
c:被类的所有对象共享
举例:咱们班级的学生应该共用同一个班级编号。
其实这个特点也是在告诉我们什么时候使用静态?
如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
举例:
饮水机(用静态修饰)
水杯(不能用静态修饰)
d:可以通过类名调用
其实它本身也可以通过对象名调用。
推荐使用类名调用。
静态修饰的内容一般我们称其为:与类相关的,类成员
static的注意事项
a:在静态方法中是没有this关键字的
如何理解呢?
静态是随着类的加载而加载,this是随着对象的创建而存在。
静态比对象先存在。
b:静态方法只能访问静态的成员变量和静态的成员方法
简单记:静态只能访问静态,非静态可以访问静态的也可以访问非静态的
理解:静态变量和成员变量的区别
A:所属不同
静态变量属于类,所以也称为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
B:内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
C:内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
Math的掌握
最后附上一张内存图帮助理解
PS:4次的博客总算写完了,比前几次来说这次博客图片更多,例子更多,应该更容易理解,希望日后能用到