java基础知识整理

Day01 常见DOS命令和环境变量的配置

每天要做的事——笔记、作业、代码

知识点的学习——A:是什么?

B:有什么特点?

C:如何使用?

D:什么时候使用?

E:能讲给别人听么?

一、学习的前提

(1)目标要明确

(2)兴趣是最好的老师

(3)自信是成功的法宝

(4)要求和建议

A:写总结,记笔记,写注释。

B:多交流

C:勤练习:敲--狂敲(学习的捷径 不走弯路,就是捷径)

二、计算机基础知识

(1)计算机

(2)计算机硬件

(3)计算机软件

(4)软件开发

(5)人机交互

A:图形化界面

B:DOS命令行

(6)如何打开控制台--DOS命令行窗口

A:开始--程序--附件--命令提示符

B:开始--运行--cmd--回车(Enter)

C:Win+R--cmd--回车(Enter)

(7)常用的DOS命令

A:盘符的切换

**D:回车

B:进入目录

**cd aaa

**cd c:\aaa\bbb

C:回退目录

**cd...  返回上一级目录

**cd\   返回根目录

D:删除文件

**del a.txt

**del *.txt  删除所有以.txt结尾的文件

E:清屏

**cls

F:退出DOS窗口

**exit

了解:dir,md,rd

(8)键盘的布局及常用的文本快捷键

A:熟悉以下几个键

**Tab

**Shift

**Ctrl

**Win

**Alt

**空格

**Enter

**上下左右键

 

三、Java语言

1、计算机语言

A:语言 人与人交流的一种方式

B:计算机语言 人与计算机交流的一种方式

2、Java语言的概述

SUN(Stanford University Network)1995年推出的一门高级编程语言。

是一种面向Internet的编程语言。Java之父--James Gosling(詹姆斯·高斯林)。

3、Java语言的三种技术架构

A:JavaSE(J2SE)标准版

B:JavaEE(J2EE)企业版

C:JavaME(J2ME)小型版

   **3G(Android)

4、Java语言的跨平台性

——Java  Virtual  Machine

A:小霸王游戏机(模拟器)

B:Java语言之所以能够跨平台,因为JVM的存在。不同的操作系统有对应版本的jvm,Java只要有虚拟机就能运行。

   JVM用于保证Java语言的跨平台。

5、JDK、JRE

——Java Development Kit   Java Runtime Environment

A:JRE() 运行环境

**包含JVM+java核心类库

B:JDK() 开发工具包

**包含JRE+Tools

6、JDK的下载

A:官网

**www.oracle.com

**java.sun.com

B:百度或者谷歌

**概念性的东西用百度

**技术性的东西用谷歌

C:从老师这直接拷贝

7、JDK的安装与卸载

A:卸载

**开始--设置--控制面板--添加与删除程序

**360管理软件

B:安装注意事项

**安装的目录不能有空格等非法字符,也不能带有中文。

**jre可以安装,也可以不安装。

8、环境变量的配置

A:环境变量

就像一个指向灯。当前执行的程序在当前目录下如果不存在,windows系统会在系统中已有的一个名为path的环境变量指定的目录中查找。如果还没有找到,就出现以上的错误提示。(exe,bat)

B:临时配置方式:通过dos命令中set命令完成

**set :用于查看本机的所有环境变量的信息。

**set 变量名 :查看具体一个环境变量的值。

**set 变量名= :清空一个环境变量的值。

**set 变量名=具体值 :给指定变量定义具体值。

想要在原有环境变量值基础上添加新值呢?

首先,通过%变量名%操作符获取到原有环境变量的值。

然后加上新值后在定义给该变量名即可

举例:给path环境变量加入新值

set path=新值;%path%

注意:如果使用start开启新的DOS窗口,那么临时配置依然有效。

C:永久配置

**如何找到环境变量:

***我的电脑--右键属性--高级--环境变量--系统变量

***新建JAVA_HOME

****变量名 JAVA_HOME

****变量值 D:\develop\Java\jdk1.6.0_30(JDK的安装目录)

***编辑Path

****变量名 Path

****变量值 %JAVA_HOME%\bin;(以前的path)

 

四、体验Java程序--HelloWorld

1、开发工具

A:普通的记事本

B:EditPlus高级记事本

C:Eclipse和MyEclipse这样的IDE(集成开发工具)工具

2、开发流程

class Demo{

public static void main(String[] args){

System.out.println("Hello World");

}

}

A:java语言的基本组成部分是类,我们用class关键字来表示。

B:类要被使用,所以给它起个名字Demo。这个名字可以随便起。(不要用中文或者全数字)

C:Exception in thread "main" java.lang.NoSuchMethodError: main

如果这个类想要独立运行,必须有main函数。否则,就会报错。

D:如果想在控制台输出一些内容,那么就是用打印语句

System.out.println("随便写"); //会把()里面的内容输出到控制台

E:用javac命令编译源文件,基本格式

**javac 带后缀名的文件名

F:用java命令运行java字节码文件(class文件),基本格式

**java 不带后缀名的类名

练习:在控制台输出你中文名字的拼音

编写源代码--javac进行编译--java进行执行。

注意:如果文件夹选项将文件扩展名隐藏,会出现文件未找到异常

 

五、classpath环境变量

(1)classpath是我们java的类文件目录的环境变量。

A:执行java Demo命令,就会到classpath中去找Demo.class是否存在。

B:如果你配置了classpath,肯定在classpath中找,如果没有,报错。

C:如果你配置classpath的时候,后面加了分号,这个时候,它首先在classpath下面找,如果没有,在到当前目录下找,再没有,报错。建议:classpath不要加分号。

D:没有配置classpath,那么只在当前路径下找。

注意:最后面不要加"",如果要当前目录,可以这么做——set classpath=.;E:\xxxxxx

六、环境变量pathclasspath的作用是什么?

path变量是windows程序文件的目录,作用是指定DOS命令行下命令的路径。举例:在DOS命令行下面执行命令:javac,编译程序时,它会到path变量所指定的路径中查找看是否能找到相应的命令程序。

    classpath变量值是java类文件的目录,作用是指定类搜索路径。 JVM就是通过classpath来寻找该类的字节码文件的。

 

七、关键字

(1)定义:被Java语言赋予了特殊含义的单词

(2)特点:关键字中所有字母都为小写

(3)goto和const虽然从未使用,但也作为Java关键字保留。

 

八、标识符

1、定义

 简单说就是起名字。

A:Java 语言中,对各种变量、方法和类等要素命名时使用的字符序列称为标识符。

2、标识符的规则

A:由26个英文字母大小写,数 字:0-9 符号:_ $ 组成。

B:不能以数字开头。

C:不能与关键字重名。

注意:java语言严格区分大小写。

3、Java中的名称规范

见名知意:看见名字知道意思

驼峰命名

A:包 其实就是文件夹

  **全部小写 xxx.yyy.zzz

  **www.baidu.com com.baidu.www

  **www.itcast.cn cn.itcast.www

B:类或者接口

  **如果由一个单词组成,首字母大写。例如 Demo

  **如果由多个单词组成,每个单词的数字母大写。例如 HelloWorld

C:变量和函数

  **如果由一个单词组成,全部小写。例如 name

  **如果由多个单词组成,第一个单词的数字母小写,其后每个单词的数字母大写。例如 getAge

  **变量名是名称,函数名是动词+名称

D:常量

  **如果由一个单词组成,全部大写。例如 MONEY

  **如果由多个单词组成,每个单词大学,然后用_连接。例如 BANK_MONEY

Day02 注释 常量 进制 变量 基本数据类型 运算符

一、注释

1、定义

用于对程序进行说明的文字,就可以看成是注释。

2、注释的格式

A:单行注释

**举例://我们好

B:多行注释

**举例:

/*

我们都是

好孩子

*/

C:文档注释

**举例:

/**

@author itcast

@version V1.0

*/

3、注释的用途

A:解释说明程序,给人看的。

B:用于调试程序。

C:用于面试

写一段代码?

a:注释是否完整

b:格式是否良好

注意A-单行可以嵌套单行注释,也可以嵌套多行注释;

  B-多行可以嵌套单行注释,不能嵌套多行注释;

  C-文档注释可以嵌套单行注释,不能嵌套多行注释。

 

小插曲:写程序的好习惯——

A:明确需求;---要干什么?

B:寻找思路;---用什么技术进行问题的解决?

C:细化步骤;---每一步如何进行实现?

D:编写代码。

 

二、常量

(1)在程序的运行过程中,其值是不能改变的量。

(2)常量的分类

A:整数常量 10,-10

B:小数常量 12.5

C:布尔常量 true,false

三、工具的使用

(1)灵格斯翻译家/金山词霸/有道词典

(2)截图工具(windows7自带截图工具)

(3)EditPlus

A:把EditPlus添加至右键菜单中

**安装时选中

**通过工具--首选项--常规--进行选中

B:如果去掉备份文件(.bak)

**工具--首选项--文件--去掉保存时创建备份文件前面的勾

 

四、进制转换

(1)进制:简单的说,就是计数的方式。x进制就是逢x进一。

(2)java语言中,对整数有3中表现形式

A:十进制

B:八进制

C:十六进制

(3)进制的由来:进制是由电信号来的。

A:二进制

**逢2进1

**由0,1组成

B:八进制

**逢8进1

**由0-7组成

**用0开头表示八进制

(4)不同进制的数据演示。

(5)进制转换

A:其他进制到十进制

**规律:把系数*基数的权次幂相加即可。

**系数

**基数

**权

 

**举例

***二进制到十进制:1101 对应 13

***八进制到十进制:056 对应 46

***十六进制到十进制:0xF4 对应 244

B:十进制到其他进制转换

**规律:除基取余,直到商为0,最后,余数反转就是结果。

**举例

***十进制到二进制:60 对应 111100

***十进制到八进制:60 对应 074

***十进制到十六进制:60 对应 0x3C

**技巧

***十进制到八进制

****十进制--二进制--八进制

****13 -- 1101 -- 15 (015)

***二进制到八进制:

****从右往左,每三位一组合,左边不够用0补。

****把组合后的每一位换算成十进制数据。

****最后,从左往右,把结果进行组合即可。

***十进制到十六进制

****十进制--二进制--十六进制

****13 -- 1101 -- 13 (0xD)

***二进制到十六进制:

****从右往左,每四位一组合,左边不够用0补。

****把组合后的每一位换算成十进制数据。

****最后,从左往右,把结果进行组合即可。

****对应位上的数据,应该是十六进制的。

五、在计算机内,有符号数有3种表示法:原码、反码和补码。

(1)原码

A:所谓原码就是二进制数的有符号表示法,即最高位为符号位,

“0”表示正,“1”表示负,其余位表示数值的大小。

举例: 符号位  数值位

+7         0             0000111

-7         1             0000111

B:原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中原码

00000001+10000001=10000010,换算成十进制为-2。显然出错了。

在计算机中,数值一律用补码来表示(存储)。

主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。

另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

(2)反码

A:正数 与原码相同

B:负数 符号位不变,数值位按位取反,0变1,1变0。

举例: 符号位  数值位

+7         0             0000111

-7         1             1111000

(3)补码

A:正数 与原码相同

B:负数 反码加1。

举例: 符号位  数值位

+7         0             0000111

-7         1             1111001

练习:

例:已知某数X的原码为10110100B,试求X的补码和反码。

例:已知某数X的补码11101110B,试求其原码。

六、变量

(1)在程序的运行过程中,其值是可以改变的量。

A:是内存中的一小块存储区域。

B:用于存储数据。

(2)声明变量的格式:

A:数据类型 变量名 = 初始化值;

   **byte b = 10;

   **System.out.println(b);

B:数据类型 变量名;

   变量名 = 初始化值;

   使用变量

   **byte b;

   **b = 20;

   **System.out.println(b);

(3)好处:该空间可以重复使用。

(4)什么时候使用变量呢?当要使用的数据是不确定的时候。

七、数据类型

1、分类

A:基本数据类型

B:引用类型(类,接口,数组)

2、基本数据类型

4类8种,区别在于他们在内存中的存储空间大小不一样。

A:整数

**字节 byte 占1个字节

**短整型 short 占2个字节

**整型 int 占4个字节

**长整型 long 占8个字节 其后跟L或者l标示

B:浮点数

**单精度 float 占4个字节 其后跟F或者f标示

**双精度 double 占8个字节

C:字符

**char 占2个字节

D:布尔

**boolean 占1个字节 true,false

注意:整型默认是int;浮点型默认是double。

3、数据类型的转换

A:数据参与运算

**参与运算的数据类型要一致。

B:转换规则

**布尔型不能参与运算。

整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:

**:容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为:

byte,short,char->int->long->float->double

byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型

**:容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。

**:有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。

八、运算符

1、算数运算符 +,-,*,/,%,++,- -

A:%

**左边小于右边,结果是左边

**左边等于右边,结果是0

**左边大于右边,结果是余数

**余数的正负,取决于左边的正负

**应用:%2 (结果是0,1)

B:++,--

**单独使用,放在操作数前后结果一样。 a++;++a;

**参与操作(运算,赋值,打印)时,放在操作数的前面,数据本身改变,再参与操作。

int a = 12; b = ++a;  //a=13,b=13;

**参与操作(运算,赋值,打印)时,放在操作数的后面,数据先进行临时存储,数据本身改变,最后将存储的数据进行赋值。

int a = 12; b = a++;  //a=13,b=12;

C:+

**正号

**加法运算符

**字符串连接符

***"hello"+'A'+1 结果是helloA1

***'A'+1+"hello" 结果是66hello

2、赋值运算符 =,+=,-=,*=,/=,%=

A:int x = 3;//把3赋值给int类型变量x

B:x += 3; //x = x + 3;  把左边和右边相加赋给左边。

C:左边必须是变量。

D:面试题

short s = 2;

s = s + 2;

s += 2; //+= 有一个自动强制转换的过程

哪一行会报错?为什么?

3、关系运算符 ==,!=,>,>=,<,<=

A:比较运算符的结果都是boolean型,也就是要么是true,要么是false。

**System.out.println(3==3);  结果是true

**System.out.println(3!=3);  结果是false

4、逻辑运算符 &,|,^,!,&&,||

逻辑运算符用于连接boolean类型的表达式

/*

&运算符:与

左边       右边 结果

true        true true

false        true     false

true        false     false

false        false    false

简单的说:有false则false。

*/

/*

^运算符:异或

左边       右边 结果

true       true false

false      true     true

true       false    true

false      false    false

简单的说:相同则false,不同则true。

*/

/*

&&:短路与

&:与

区别:&&是左边为false了,右边就不操作了。

  &左边是false,右边还得继续操作。

*/

5、三元运算符 (?:)

A:(条件表达式)?表达式1:表达式2;

**如果条件表达式为true,运算后的结果是表达式1;

**如果条件表达式为false,运算后的结果是表达式2;

B:表达式:用运算符连接起来的式子就叫表达式

**算术表达式 a+b

**赋值表达式 a+=2;

**关系表达式 (a+b+c) > (a+b)

**逻辑表达式 (a<b) || (c>d);

**三元运算符 100>200?(300>200?100:200):200; 结果是:200

C:特点:运算完后,肯定有结果。

6、位运算符 &,|,^,~,>>,>>>,<<

位运算,要求我们先把数据转换成二进制。

A:System.out.println(4 & 3);

B:System.out.println(4 | 3);

C:System.out.println(4 ^ 3);

**一个数对同一个数异或两次,该数不变。

**应用:加密。

D:System.out.println(~4);

E:<< 就是将左边的操作数在内存中的二进制数据左移右边操作数指定的位数,

   右边被移空的部分补0。相当于乘与2的移位数次幂

   2<<4-----2*2^4

F:>> 右移稍微复杂一点,如果最高位是0,左边被移空的位就填入0;如果最高位是1,左边被移空的位就填入1。相当于除以2的移位数次幂

G:>>> 无论最高位是1还是0,左边被移空的高位都填入0。

 **讲一个应用。通过10进制获取十六进制的数。

***1&1=1 0&1=0 发现,任何数和1做位与运算,结果不变。

通过此规律,我们就可以取得任意二进制的多少位

***num = num >>> 4;

   num & 15

   取得倒数第二个四位。

Day03 语句(顺序 选择 判断 循环)

一、顺序结构

(1)程序从上往下,从左往右依次执行。

二、判断结构(if语句)

1、第一种格式

if(条件表达式--只有两个结果(true/false)){

执行语句;

}

A:执行流程

首先判断条件表达式,如果值为true,那么就执行if语句所控制的语句体。

如果为false,就不执行语句体。

B:条件表达式无论简单(a>b)或者复杂((a+b+c)>(a+b)),其结果是boolean值。true或者false。如果是其他的值,则错误。

注意问题:

A:if(条件表达式)其后没有分号。

一般来说,有"{}"就没有";",有";"就没有"{}"

B:if语句所控制的语句如果是一条语句,我们可以不写大括号;

   如果控制的是两条以上的语句,必须加大括号。

   if语句的控制体没有加大括号是其后跟的一条语句。

   建议:永远加上大括号。避免不必要的错误。

2、第二种格式

if(条件表达式){

执行语句1;

}else{  //else 否则的意思

执行语句2;

}

A:执行流程

首先判断条件表达式,如果值为true,那么就执行语句1。

如果为false,就执行语句2。

B:if可以单用,第一种格式。

 有else必须有if。

C:发现if语句的第二种格式和三元运算符相似。

区别:

(1)三元运算符是if语句的简写形式。

(2)所有的三元运算符都可以用if语句改写。反之不行。

为什么?因为三元运算符是一个运算符,计算完后,必有结果。

3、第三种格式

if(条件表达式){

执行语句1;

}else if (条件表达式){

执行语句2;

}

……

else{

执行语句n;

}

A:else可以省略,但是不建议。

(1)它是第三种格式的组成部分。

(2)你有可能没有判断完所有的情况,我们就可以使用else来完成特殊情况。

B:执行流程

虽然格式很长,但是,它整体只是一条语句。

不断的判断,只要有满足条件的条件表达式,就执行该判断处控制的语句体,执行完后。语句结束。

当都不满足时候,执行else。

C:if后面必须有条件表达式。

else后面没有条件表达式。

D:if语句的嵌套

if语句里面的语句体还是if语句。

4、if的应用

A:给定一个数值,请打印出对应的星期?。

B:一年有四季,每季三个月

   春:3,4,5

   夏:6,7,8

   秋:9,10,11

   冬:12,1,2

   给定一个月份,输出对应的季节。

C:if语句什么时候使用?

***对几个值进行判断的时候

****

1,2,3,4,5,6,7

if(x==1)

{}

else if(x==2)

{}

...

***对结果是boolean类型的进行判断

****

if(x>3)

{}

else if(x==3)

{}

else if(x??)

{}

...

***对范围进行判断

****

if(x>90 && x<100)

{}

else if(x>80 && x<=90)

{}

...

三、选择结构

1、基本格式

switch(表达式){

case 取值1:

执行语句;

break;

case 取值2:

执行语句;

break;

…...

default:

执行语句;

break;

}

2、针对基本格式的说明

A:switch 用于定义选择结构范围。

表达式:被选择的结果,该表达式只能有四种类型:byte,short,int,char

注意:在JDK5以后,还支持一个叫做枚举的类型(enum);JDK7以后,还支持String类型。

B:case :被选择的答案

C:break:跳出,结束switch语句。

D:default:默认的意思。当所有的case都不匹配时,执行default里面的内容。相当于if语句中的else。

3、switch语句细节

A:switch语句何时结束?

a:执行语句遇到break。

b:执行到语句的结尾。

B:最后一个break可不可以不要呢?可以。

   中间的break可不可以不要呢?可以。但是结果可能不是想要的。所以一般中间 的break不要省略。

     面试一般考省略中间break的情形

C:default和case前后顺序有关系吗?

A:执行上-- 执行上有关系,先执行所有case,当所有的case都不满足时,再执行default。

B:写法上-- 没有关系 建议按照基本格式写。default放最后。

D:swithc语句中,break省略的情况有没有用呢?有。当多个答案针对同一处理。

4、程序的流程:

先判断case的取值

A:如果case取值与表达式匹配,执行该case下的语句,若有break则程序结束,若没有,则程序继续往下执行,此时,不再判断case取值,直至遇到break或者至大括号处,程序结束

B:如果case取值与表达式不匹配,则不执行与之对应的语句,程序继续执行A

C:如果所有的case取值都与表达式不匹配,程序将执行default下的语句

   注意:当default语句置于非末尾处并且所有case值都不匹配时,程序执行default语句后,有beak将

结束程序,否则继续向下顺序执行,直至遇到break或者大括号,程序才结束。

If和switch语句的应用场景

如果是对具体的个数的数值进行判断

两种皆可,建议使用switch,因为它会将被选答案加载进内存,选择效率会稍高。

如果是对区间进行判断,用if

如果运算结果是Boolean类型,用if.

四、循环结构

1、while循环的格式

while(条件表达式){

执行语句;

}

A:执行流程:

a:首先判断条件表达式,如果结果为true,就执行while循环控制的语句。否则,不执行循环体。

b:循环体语句执行后,在回到A。知道条件不成立。

   Ctrl+C 在DOS窗口中强制结束程序。

B:while(条件表达式)不要加分号,否则结果你理解不了。

C:while所控制的语句是一条的时候,也可以省略大括号,但是不建议。

 

2、do while循环的格式

do{

执行语句;

}while(条件表达式);

A;执行流程:

a:先执行一次循环体。

b:再判断条件表达式。如果值为true,就返回A继续。否则,结束循环。

B:与while的区别:

a:while后面有分号

b:do while循环至少执行一次循环体,while循环有可能一次都不执行。

3、for循环的格式

for(初始化表达式;循环条件表达式;循环后操作表达式){

执行语句;(循环体)

}

执行流程:

A:首先进行初始化表达式的执行。

B:其次,循环条件表达式的判断:

如果条件为true,则进循环体执行语句。

如果条件为false,则结束循环。

C:当循环体执行完毕后,就会执行循环后的操作表达式。

在接下来回到B步骤继续,直到结束循环。

D:初始化表达式只执行一次。

  循环条件表达式执行一次或多次。

  循环后的操作表达式零次或多次。

E;while循环和for循环时等价的。

变量的生命周期不一样。一般来说,只在它所属的{}内有效。

当你定义的初始化变量只为递增而存在,那么就用for循环,效率较高。

当你定义的初始化变量,操作完后,还得继续使用,用while循环。

for( ;  ; ){}//for语句的最简单无限循环格式-----条件表达式默认为true

while(true){}//while语句的最简单无限循环格式

int x = 1;

for(System.out.println("a");x<3;System.out.println("c")){

System.out.println("d");

}

//a d c d c

4、循环嵌套

A:外循环执行一次,内循环执行多次。

B:如果是打印形状等,外循环控制行数,内循环控制列数。

C:举例

**打印正三角 内循环的循环条件表达式变化

内循环的循环条件表达式随着外循环的变化而变化。

 外:(int x=0;x<5;x++)

 内: (int y=0;y<=x;y++)

**打印倒三角 内循环的初始化表达式变化

内循环的初始化表达式随着外循环的变化而变化。

 外:(int x=0;x<5;x++)

 内: (int y=x;y<5;y++)

**打印33乘法表

5、累加思想与计数器思想

A:通过变量记录每次 变化的结果;通过循环进行累加动作。

B:通过变量记录数据的状态变化,也需通过循环完成。

  计数器的条件根据实际情况而定

注意:一定要注意哪些语句参与循环,哪些语句不参与循环。

 

五、continuebreak异同

(1):都有自己的应用范围

A:continue用于循环

B:break用于选择结构和循环结构

单独使用:他们单独使用时,无意义,并且下面不可以有语句,因为执行不到。

(2):break结束当前所在循环,continue结束本次循环,进入下一次循环。

标号可以改变跳出的循环。但是一般不用

 

六、变量和语句的引用场景

1、什么时候使用变量?

** 当我们使用的数据是一个不确定的值的时候

2、什么时候使用if语句?

** 当进行判断的数值较多,结果是boolean类型或者是一个范围的时候,我们使用if    语句。if语句相对与switch语句范围更广。

3、什么时候使用switch语句?

** 如果用于判断(选择)的数值不多,而且符合byte short int char 这四种类型时我们建    议使用switch语句,虽然if也能够完成,但不及switch语句效率高

4、什么时候使用循环语句?

**当要对某些语句执行很多次的时候,我们就要使用循环语句。

while:如果在执行完循环体后还需用到循环语句中的变量时,我们就要使用while语句 除此之外,可以用for替换。

for:  用于控制循环的增量定于在语句中,该变量只在for语句中有效,for语句执行完成后,该变量在内存中被释放。如果仅仅只是定义循环增量,用for更为合适因为while定义的变量在执行完循环体后,还存在于内存中,比较浪费资源

**变量有自己的作用域

break结束当前所在循环,continue结束本次循环,进入下一次循环。

Day04 函数和数组

一、函数

1定义:

就是完成一个特定功能的一段小程序。

A:以后写代码的时候,就得注意了:

**我们在也不用把所有的代码都放到主函数里面去了。

**主函数只负责调用我们自定义的函数。

B:函数的格式

修饰符 返回值类型  函数名(参数类型 形式参数1,参数类型 形式参数2,…){

执行语句;

return 返回值;

}

       说明:

**修饰符---- 修饰函数的。现在不用管,后面专门讲。现在统一写为: public static

**返回值类型---- 函数本身是具有特定功能的一段独立的小程序,这个功能在运算完或者执行完之后,肯定有结果,那么结果到底是什么类型的呢,我们需要在函数上标示一下。

**函数名---- 为了方便使用定义好的函数,我们就给它起个名字。

**参数类型----

***形式参数----接受实际参数的变量

***实际参数----实际使用的数值

**执行语句----函数是用于完成一段特定功能的,有可能这段功能需要多条语句执行,这就有了执行语句。

**return---- 就是将执行的结果返回回来的一个关键字。其后跟的是返回的结果。

2特点

A:定义函数可以将功能代码进行封装,便于对该功能进行复用。函数的出现提高了代码的复用性。

B:自定义函数只有被调用才会被执行。

C:函数中只能调用函数,不可以在函数内部定义函数。因为函数是平级的。

D:被调用时:

**有明确返回类型的函数:

***可以单独使用,但是没有意义;

***可以赋值给一个和返回类型对应的变量,然后输出变量;

***可以直接在输出语句中直接使用;

**void返回类型的函数:

**只能单独调用。不能用于打印

注意:返回值类型和参数列表中参数类型没有关系!

定义功能,功能中需要定义什么就定义什么,不需要的就不要定义。

3函数的应用

A:如何自定义函数--------两个明确

**明确函数的返回值类型

**明确参数列表(形参的类型及个数)

B:两个整数的求和

public class Sum {

public static void main(String[] args) {

int sum = getSum(3,4);

System.out.println(sum);

}

//返回值类型:int,未知内容:int a,int b

public static int getSum(int a,int b){

return a+b;

}

}

C:取得两个整数中较大的值

public class Max {

public static void main(String[] args) {

int max = getMax(3,5);

System.out.println(max);

}

//返回值类型:int,未知内容:int a,int b

public static int getMax(int a,int b){

return a>b?a:b;

}

}

D:比较两个整数是否相等

public class Compare {

public static void main(String[] args) {

boolean b = isEquals(3, 4);

System.out.println(b);

}

//返回值类型:boolean,未知内容:int a,int b

public static boolean isEquals(int a,int b){

return a==b;

}

}

E:取得三个整数中较大的值

public class Max {

public static void main(String[] args) {

int max = getMax(3,5,7);

System.out.println(max);

}

//返回值类型:int,未知内容:int a,int b,int c

public static int getMax(int a,int b,int c){

int temp=a>b?a:b;

int max =temp>c?temp:c;

return max;

}

}

F:打印nn乘法表

public class NnChengFaBiao {

public static void main(String[] args) {

printNnchengfabiao(6);

}

//返回值类型:void,未知内容:int n

public static void printNnchengfabiao(int n){

for(int x=1;x<=n;x++){

for(int y =1;y<=x;y++){

System.out.print(y+"*"+x+"="+x*y+"\t");

}

System.out.println();

}

}

}

4.函数的重载

A:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。

B:函数的功能一样,仅仅是参与运算的未知内容不同时,

   可以定义多个函数,却使用统一函数名称,这样方便阅读。

   在调用时,虚拟机通过参数列表的不同来区分同名函数。

C:好处:方便阅读,优化了程序设计。

   特点:与返回值类型无关

D:我们以后如何判断几个函数是否是重载的呢?

**函数名相同

**参数列表不同(个数和类型)

二、数组

1.数组的定义

存储的是同一种数据类型的数据的集合,它是一个容器。

2.数组的格式(一维数组)

第一种格式

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

示例:int[] arr = new int[5];

**左边:

int 表示数组中元素的数据类型

[] 表示数组

arr 数组的名字

简单说:定义了一个int类型的数组,名称是arr。

**右边:

new 创建一个实体

实体:存储一个数的东西叫变量。存到多个数据的东西叫实体。

new:class是用来定义一个类的,new是用来创建一个实体的。

int 表示数组中元素的数据类型

[] 表示数组

5 表示此数组中有5个元素

简单说:创建一个int类型的数组实体,该实体中可以存储5个int类型的元素。

第二种格式:

  元素类型[] 数组名 = new 元素类型[]{元素1,元素2,……};

示例:int[] arr = new int[]{3,5,1,7};

int[] arr = {3,5,1,7};

Tips:当明确数组元素时,建议使用第二种比较方便

注意:定义数组时,不要忘记指定数组的长度和名称;在指定了数组长度的同时,不可列出其元素内容,因为可能出现元素类型与数组定义类型不一致。[ ]可以放在数组名的左边,也可以放在右边。

3.内存图

java语言又把它所用到的内存分为了5个区域:

 

 

 

 

 

 

 

 

 

 

 

 

 

4.操作数据可能遇到的问题

A: 数组角标越界异常 ArrayIndexOutOfBoundsException(程序运行的时候发生)

访问到了数组的最后一个元素后,你还在继续访问,此时就会出现此问题。

B: 空指针异常 NullPointerException(程序运行的时候发生)

一个引用变量已经不再指向对内存的地址。这个时候,你还在使用这个引用。

5.数组的常见操作

A:操作数组,肯定离不开角标。--------角标思想

B:遍历数组

public class BianLi {

public static void main(String[] args) {

int[] arr={23,45,12,27,44,99};

printArray(arr);

}

//遍历数组

public static void printArray(int[] arr){

System.out.print("[");

for(int x =0;x<arr.length;x++){

if(x!=arr.length-1){

System.out.print(arr[x]+",");

}else{

System.out.print(arr[x]+"]");

}

}

System.out.println();

}

}

C:获取最值

思路:将数组的第一个元素定义为最大值,然后依次和其他元素进行比较,如果其他元素比标记的最大值还大,就进行重新标记,最后将最大值的标记返回即可。

//获取最大值

public static int getMax(int[] arr){

int max = arr[0];

for(int

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值