Java学习第一周

Java学习第一周

一.java的历史

一.Java的历史和三大版本

1、Java的发展史

​ Java由sun公司开发,java之父 James Gosling ,Java是一门面向对象的编程语言,也称为“高级编程语言”

​ Java在1994年由sun公司推出,Java的前身叫oak语言,开源,免费

​ Java的版本从JDK1.0开始 到目前的JDK13

​ 目前开发常用版本: JDK8.0、JDK9.0

2、Java语言能做什么

​ Java语言主要用于互联网应用程序开发,例如 天猫、京东、 大型公司的项目管理系统、手机APP的后台数据支撑系统 ,主要开发web系统(基于浏览器访问的) ,还有服务器后台存储的数据分析,数据查询等相关系统。

3、Java的版本分类

​ a、Java SE (J2SE) Java PlatForm Standard Edition Java的标准版本(称为Java基础)

  b、JavaEE (J2EE) Java PlatForm Enterprise Edition  Java的企业版本 

​ c、JavaME (J2ME) Java PlatForm Microsoft Edition Java的微型版本

在这里插入图片描述

二、Java的开发环境

1、配置开发环境

​ 第一步 下载jdk 并安装 ,建议安装在默认c盘 官网下载

​ 第二步 配置环境变量

	    我的电脑-》 属性-》 高级系统设置-》 环境变量     --》  新建 一个系统变量 ,变量名 

​ JAVA_HOME : C:\Program Files\Java\jdk1.8.0_144

​ 在path路径下 ,配置 %JAVA_HOME%\bin , 需要将该路径放置path的最前面

​ 或者直接在path下配置 “C:\Program Files\Java\jdk1.8.0_144\bin”

​ 第三步:测试

​ win+r : 运行窗口 中输入cmd

在这里插入图片描述

​ 输入 javac
在这里插入图片描述

环境变量配置成功

三、Java的第一个程序及运行原理

Java程序是一个 以.java结尾的文件 , 称为“源程序”

Java程序需要运行 ,必须经过两个步骤: 先编译再运行,将源程序先编译成.class文件 ,编译后的class文件称为“字节码”文件 ,然后再由Java虚拟机(JVM)运行 文件,最后得到结果 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sW5CyOYt-1601307982813)(F:\资料\老师资料\笔记\笔记图片\运行过程.png)]

JDK : Java Development Kit Java开发工具 ,包括Java开发中运用的所有工具(包,接口API等,运行环境等)

JRE :Java Runtime Environment Java运行环境 , 运行Java程序需要的相关依赖

JVM : Java Virtual Mechine Java虚拟机器, 用于运行Java程序实现跨平台虚拟计算机。

在这里插入图片描述

​ 1、寄存器(程序计数器)

​ 2、本地方法区

​ 3、堆区(堆内存)

​ 4 、栈区(栈内存)

​ 5、 方法区

在这里插入图片描述

写第一个Java程序

​ 1、新建HelloWorld.java 文件

​ 2、编写Java程序 ( 文件名与类名 保持一致)

public class HelloWorld{
	// 这里是程序的入口  main函数
	public static void main(String [] args){
		System.out.println("hello word!!!!");
	}
}

3、编译java程序 (Compile)

​ 在文件所在的目录下输入cmd ,打开命令行窗口 输入

​ javac HelloWorld.java

4、运行java程序

​ java HelloWorld (注意这里没有后缀.java )

注意 :对于中文输出乱码,需要 另存为一下,修改编码格式为ANSI 即可

Java文件 一次编译多次运行

Java的运行原理图:

在这里插入图片描述

四、Java的开发工具

Java开发使用集成开发环境,一般企业使用居多的 eclipse 或 IDEA 开发工具

idea常用快捷键

​ alt+enter : 自动导入包, 代码自动修正

​ ctrl+d :将当前光标 所在行 复制到下一行

​ ctrl+ y : 删除光标所在的 当前行

​ ctrl+alt+l : 格式化代码

​ ctrl+ / : 当行注释

​ ctrl+shift+/ : 文档注释

创建项目:

方式一: 直接创建项目 在src下创建包和类文件 ,每次创建项目都是独立窗口

方式二: 先创建一个空项目(Empty Project) ,再创建子模块Module ,好处是一个项目下可以存放多个子模块
给文件增加文件头注释

/** 
* @Author: wuyafeng by softeem
* @Date: ${DATE} ${TIME} 
* @Description: 
* 
*/    

在这里插入图片描述

Java的注释 分为三种

1、单行注释(ctrl+/) : 用于对某一句代码的注释

2、多行注释(ctrl+shift+/): 用于对一段代码的注释

3、文档注释 (/** + enter) : 注释一个类 或 一个方法, 或一个语句块 ,文档注释可以自动生成API文档 javadoc 命令

**

二.java关键字和标识符

关键字

1.定义:

在Java程序中,已经定义好的被预先使用的一些特殊的单词称为关键字,一共有50个关键字(48关键字+2个保留字),关键字都是小写的英文字母

2.关键字分类

2.1数据类型关键字

​ byte:字节型

​ shory:短整型

​ int:整形

​ long:长整型

​ float:单精度浮点型

​ duoble:双精度浮点型

​ void:空类型

​ null:空对象

2.2流程控制关键字

​ if:条件分支判断

​ else:条件分支

​ switch:条件分支判断

​ case:条件分支其中一种情况

​ default:默认

​ break: 退出条件 或 循环

​ continue : 退出当前循环,继续下一次循环

​ for : 循环

​ do: 循环

​ while : 循环

​ return:方法的返回

2.3面向对象关键字

​ class:定义类

​ interface:定义接口

​ extends:继承一个类

​ implements:实现一个接口

​ super:超级(用于调用父类的成员)

​ this:当前类

​ instanceof:判断一个类的类型

​ import:导入一个类

​ package:定义一个类所在的包

​ new:创建对象

2.4修饰符关键字

​ abstract:修饰抽象类,抽象方法

​ final:修饰常量

​ native:本地的,也用于修饰

​ private:私有的

​ protected:受保护的

​ public:公有的

​ static:静态的

​ synchronized:修饰方法或代码块,用于线程安全的

​ transient :瞬时状态

​ volatile :瞬时状态

2.5异常关键字

​ try:试一试

​ catch: 捕获异常

​ finally: 最后执行的代码块 ( 多出的一个)

​ throws :定义需要抛出的异常

​ throw:抛出异常

2.6其他关键字

​ assert:测试中的断言

​ strictfp:其他

​ enum:定义枚举

2.7保留字

​ const,goto

标识符

1.定义

在Java程序中,所有由程序员在自己命名的元素统称为“标识符”

2.标识符命名规则

标识符由数字,字母,下划线和$组成

标识符不能以数字开头

标识符区分大小写

标识符不能是关键字

注意:定义类名的标识符:首字母必须大写,后面的单词的首字母大写,遵循大驼峰命名法(例如:XxXxx,UserInfo)

定义方法 标识符:首字母尽量小写,后面的单词首字母大写,遵循 小驼峰命名法(例如:xxxXxxx,getUserName())

定义变量标识符:单词全部小写(username)

定义包名:按模块分层级,使用公司的域名倒写,(例如:com.softeem.xxx)

定义项目名:尽量使用英文(Java项目可以使用中文,JavaWeb项目一定使用英文)

二.Java的常量和变量

常量

1.定义

在Java中,固定不变的数据量称为常量,常量也有内存,常量存放在被称为“常量池”的内存中

面试题:常量池的内存有哪些?(存放常量的内存有哪些)

2.常量的分类

常量类型含义示例
整数常量所有的整数1,100,500
小数常量所有的小数1.5,-3.4,3.1415926…
字符常量有单引号引起来,只能写一个字符,不能为“‘a’,‘z’,’ ‘
字符串常量由双引号引起来,可以写多个字符,可以为“””hello“,"\n"
布尔常量用于条件判断,只有2个常量true,false
空常量用于表示空对象null

常量修饰符:final

final int n = 100//定义常量的语法,n的值只能为100,不能再次改变,其中n就是常量

变量

1.定义

​ 在Java中用于保存一个数据的最小内存单元称为“变量”,变量中每次只能存放一个值,变量的数值是可以被改变的。

​ 在定义变量时,需要明确三要素:数据类型,变量名(标识符),变量值

2.变量语法

​ 数据类型 变量名 = 初始值;

或者 数据类型 变量名1,变量名2;

//定义一个变量  变量名是n,数据类型是int,初始值为100
int n = 100//将原有变量名n中的值变更为110;
n = 110

在这里插入图片描述

变量在赋值时,值必须满足与数据类型匹配,如果不匹配可能出现异常 或丢失精度

3.变量的分类:

全局变量

​ 在Java的类结构中,定义在类中,方法外面的变量,它的作用范围:整个类的方法中

public class Test1 {
    //定义全局变量 :定义在类里面,方法的外面
    int n = 100;
    //定义方法
    public void m(){
        // 输出一句话  "" 表示输出的内容    + 表示连接两个字符串
        System.out.println("n:"+n);
    }
    //定义s方法
    public void s(){
        System.out.println("n:>>>"+n);
    }
    // 定义run方法
    public void run(){
        // 局部变量   只能在声明所在的方法中使用
        int  n=200;
        int  i =1;
        // 当类总存在局部变量和 全局变量同名时, 变量的使用遵循“就近原则”
        System.out.println("局部变量n:"+ n);   // 200
    }
    // 定义eat方法
    public void eat(){
       // System.out.println("i---"+i);
    }
    /**
     * 定义 一个main方法
     */
    public static void  main(String [] args){
        // 如何调用 这个类的方法呢?  需要创建对象
        // 创建对象的语法:  类名 对象名 =  new  类名();
        //调用对象的方法语法:   对象名.方法名();
        Test1 obj = new Test1();
        obj.m();
        obj.s();
        obj.run();
        obj.eat();
    }
}

三.Java的数据类型

java是一门强类型的编程语言,它不同于一些弱类型的语言(JavaScript,php,Python),java在声明变量时必须显示的定义变量的数据类型,变量的类型一旦定义,则不能改变。Java中数据类型分为两大类。

1.基本数据类型:包括整数,浮点,字符,布尔型等

2.引用数据类型:包括类,数组,集合接口等

1.基本数据类型

1.整数型,默认值为0

数据类型关键字字节长度数值范围
字节型byte1个字节=8位-128~127
短整型short2个字节=16位-32768~32767
整形int(默认)4个字节=32位-2的31次方~2的31次方-1
长整型long8个字节=64位-2的63次方~2的63次方-1

2.浮点型,默认值为0.0

数据类型关键字字节长度数值范围
单精度float4个字节1.4013E-45~3.4028E+38
双精度double8个字节4.9E-324~1.7977E+308

3.字符型,默认值’ ‘

数据类型关键字字节长度范围
字符型char2个字节0~65535

一个字符能存放一个中文汉字

4.布尔型

数据类型关键字字节长度范围
布尔类型boolean1个字节true,false

注意:

/ 对于两个double类型/float类型的数计算, 由于计算机在计算式会缺失精度,计算的结果
        //不是预期的0.3,建议对于浮点数计算式,使用java.math.BigDecimal引用数据类型计算 
        double d1 =0.1;
        double d2 = 0.2;
        //结果 0.30000000000000004  
        double d3 = d1 + d2;
        System.out.println(d3);

        float f1 =0.2f;
        float f2 = 0.3f;
        float f3 = f1-f2;
		// 结果  -0.1000000000001
        System.out.println(f3);

对于字符类型中 "\ " 表示转移字符,不会占用内存

\n :换行

\t : 一个制表符tab

\b: 表示退格

\r: 表示enter

2.引用数据类型

在Java中除了8个基本数据类型以外的数据类型,都是引用数据类型 ,常用的引用数据类型 包括 类、数组、 接口,String 等

以类 举例

创建一个学生类 ,在一个类中会包含一些 变量(全局变量),还包含一些方法

定义一个学生类,这个类就是引用数据类型

public class Student{
        // 定义的一个字符串变量  
       String stuname="张三";
       char  sex= '男';
       int age = 20// 定义一个方法 
       public void showInfo(){
           System.out.println(stuname);
           System.out.println(sex);
           System.out.println(age);
           
       }
}

如何使用这个学生类型(引用数据类型)

public static void main(String [] args){
     // 定义学生类型  ,引用数据类型需要创建 引用的对象 
     // 引用数据类型   变量名  =   null 
    //  基本数据类型   变量名  = 初始值
    // 对于类的创建
    // 类名   对象名  =  new  类名(); 
    Student stu = new Student();
    // 对象名.方法名();
    stu.showInfo();
    
}

引用数据类型与基本数据类型的区别?

1.创建方式不同,基本数据类型直接通过定义变量的方式创建,而引用数据类型需要new一个对象

2.在JVM的内存分配不同,基本数据类型的内存在栈内存中直接创建,而引用数据类型是在栈内存中定义引用的地址,实际的内存分布在堆内存中

3.引用数据类型 可以调用它的方法, 而基本数据类型没有方法
在这里插入图片描述
基本数据类型的分布:
在这里插入图片描述

四.Java的数据类型的转换

1.为什么需要进行数据类型转换

在Java中数据进行计算时,必须要求计算的元素的数据一致,如果数据类型不一致需要进行转换数据转换分为两种情况

数据转换

1.自动类型转换

转换规则:范围小的类型向范围大的类型转换(从小到大转换)

byte->short->int->long->float->double 其中boolean类型不参加转换

char->int

转换原理:类型向上提升

2.强制类型转换

五.Java的字符ASCII码表

字符int值
a97
A65
048
依次小写字母往后都是数字,例如b为98,c为99…
A:65 BB:66 C:67 0:48 1:49 2:50

字符与数值的转换

// int 与 char类型的转换
        // 每一个char类型都有一个字符编码 这个编码参照 ASICC码表
        char c='a';
        // 自动提升 : 因为 char类型占2个字节, int占4个字节,自动char向上提升
        int n = c;
        System.out.println(n);
        // 先相加 再转换
        char c2 = (char)(n+2);  // 需要强转
        // 字符+字符  直接相加
        char c3 = 'a'+'b';
        System.out.println((int)c3);

三.Java运算符

在Java中用于程序计算的操作符统称为运算符,运算符分为如下几类

1.算数运算符

运算符说明
+加号两边是数值,可以运算,如果一边存在字符串,则当做连接符a+b
-两个数相减,减号也可以表示负数a-b
*两个数相乘,其中*不能省略a*b
/两个数相除,必须保证类型一致,其中除数不能为0,否则出现算术异常a/b
%对一个数取余a%b
++对一个数自加1a++,++a
对一个数自减1a–,--a
public static void main(String args){
        // + - * / %
        int num1 = 100;
        int num2 = 200;
        int sum = num1 + num2;
        int mul = num1-num2;
        int num3 = -num2;
        System.out.println("两个数相加"+ sum);
        System.out.println("两个数相减"+ mul);
        System.out.println("num2:"+ num2+",num3:"+num3);

        int sum2 = num1*num2;
        int sum3 = num1/num3;
        System.out.println(sum3);
        //取模
        System.out.println(10%2);
        System.out.println(1%5);
    }
  public static void main(String[] args) {
        //自加  自减
        int i = 1;
        i++;    //i = i + 1
        System.out.println("i:"+i);
        int j=1;
        ++j;
        System.out.println("j:"+j);

        int a=1;
        int sum=a++;//先将a的值赋给sum,a再自加1
        int sum2=++a;//先将a自加1,再将自加后的结果赋值给sum2
        System.out.println("sum:"+sum);
        System.out.println("sum2:"+sum2);
        System.out.println("a:"+a);

        int sum3 = a++ + a++;

        int b=1;
        int s1=b--;
        int s2= --b;
        System.out.println("b:"+b);

        //++ --
        int x=1;
        int y=2;
        int s3 =x++ + --x *(y-- + ++x);
        System.out.println(x);//2
        System.out.println(y);//1
        System.out.println(s3);//5

        //总结++ -- 的优先级高于 + - * /
    }

2.比较运算符

用于比较两个表达式之间的结果,结果返回true,false

比较运算符不能单独作为 一行代码运行 ,必须接收结果或者输出

比较运算符
>比较左边的数是否大于右边的数,如果大于返回true,否则返回falsea>b
<比较左边的数是否小于右边的数,如果小于返回true,否则返回falsea<b
>=比较左边的数是否大于等于右边的数,如果大于等于返回true,否则返回falsea>=b
<=比较左边的数是否小于等于右边的数,如果小于等于返回true,否则返回falsea<=b
==比较==两边是否相等,如果相等则返回true,否则返回falsea==b
!=与== 相反, 比较左边和右边的数是否不相等 。如果不相等返回true ,如果相等返回falsea!=b

注意: 不能连写 例如 1<3<5

public static void main(String[] args) {
        //比较运算符
        int a=1;
        int b=2;
        //a>b; //不能单独比较  必须接受结果或输出
        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a==b);
        System.out.println(a!=b);
        //增加逻辑判断
        //如果if后面的条件成立,则执行if里面的语句,如果条件不成立 则只需else语句
        if (a>b){
            System.out.println("a>b成立");
        }else {
            System.out.println("不成立");
        }

3.赋值运算符

将表达式的结果赋值给一个变量,只能赋值给变量不能赋值给常量

例如:a=3

赋值运算符说明案例
=将=右边的结果赋值给左边的变量int a=2,将2赋值给变量a
+=计算后的赋值,将+=右边的结果赋值给左边的变量a+=2 等价于a=a+2
-=计算后的赋值,将-=右边的结果赋值给左边的变量a-=b 等价于a=a-b
*=计算后的赋值,将*=右边的结果赋值给左边的变量a * =b等价于a=a*b
/=计算后的赋值,将/=右边的结果赋值给左边的变量a%=b等于a=a%b其中b!=0
%=同上,将右边的结果赋值给左边的变量a%=b 等于a=a%b其中b!=0
  // 赋值运算符 = +=  -= *=  /=  %=
        int a=2;
        a+=2;
        System.out.println(a);// 4
        a-=3;
        System.out.println(a);// 1
        a*=2;
        System.out.println(a); // 2
        a/=4;
        System.out.println(a);// 0

        a+=a-=3; // a+=(a-=3) -》 a=a +(a=a-3 )
        System.out.println("a="+a);

        int x=2;
        x+=x-=x*=x++;
        //x = x +(x = x -( x= x *(x++) ))
        // x = 2 + ( x = 2 - (x = 2 * 2))
        // x =  2 + ( 2 - 4)
        // x = 0
        System.out.println("x="+x);

        //赋值运算符的优先级最低,  从右往左计算
        int y=2;
        y*=y+=y; // 也是从右往左计算
        // y = y * (y = y + y);
        // y = 2 * (2+2)
        // y =8;
        System.out.println("y="+y);

4.逻辑运算符

在Java中用于两个或两个以上的表达式取逻辑判断的结果,通常需要使用逻辑运算符

逻辑运算符
&逻辑与,左右两边可以连接表达式,当两个表达式都成立时,整个结果为truetrue&true,false&true,false&false,true&false
|逻辑或,左右两边的表达式,任意一个成立,整个结果为truetrue|true,false|true,true|false,false|false
逻辑非 ,对表达式取反!false , !
&&短路与,与&类似,短路特点:符号左边为false,右边不再运算true&&true , true&&false
||短路或,与|类似,段落忒点:符号左边为true,右边不再运算false||true , false||false
 // 逻辑运算符
        System.out.println(true & true); // true
        System.out.println(true & false);// false
        System.out.println(false & true); // false
        System.out.println(false & false);// false
        // true&true
        System.out.println(1>0 & 3>1);
        System.out.println(1>0 && 3>1);
        // | 或
        System.out.println(true | true); //true
        System.out.println(true | false);// true
        System.out.println(false | true); // true
        System.out.println(false | false);// false
        // || 短路或
        System.out.println(true || false) ;// true

总结:&和&&的区别|与||的区别?

回答:1.&对于符号两边倒表达式都会执行&&符号左边为false,则右边不执行

|对于符号两边的表达式都会执行,||符号左边为true,则右边不执行

2.&,|两边可以直接写数字,按位计算,短路符号不能直接运算数字

int a=1;
        int b=2;
     //   System.out.println(a>b && b++>0);  // 符号右边的不运算
     //   System.out.println("b:"+b);

        System.out.println(a>b & b++>0); // 符号两边都运行
        System.out.println("b:"+b);

        // || 与 | 的区别
      //  System.out.println(a>=1 ||  a++<0); // a++ 不执行
      //  System.out.println("a:"+a);

        System.out.println(a>=1 | a++<0 );  // a++ 会执行
        System.out.println("再次输出a :" + a);

十进制转二进制

十进制转换二进制
11*2的0次方1
21*2的1次方10
41*2的2次方100
对于2的倍数,1*2的n次方转二进制1后面n个0
161*2的4次方10000

对于任意十进制转二进制,先查找比他小的且离他最近的倍数,然后差值在计算二进制,(使用拆分法)

例如: 28 = 16+8+4=11100

34=32+2=100010

96=64+32=1100000

二进制转十进制

公式:从个位开始,每一位上的数乘以2的n次方 累加之和

100100=1*2的次方+1 *2的5次方=36

5.位运算符

位移运算符说明案例
<<将一个数转成二进制之后,整体往左移动n位,扩大倍数,一个数向左移动n位,结果为这个数乘以2的n次方3<<2=3*2的2次方
>>将一个数转成二进制后,整体往右移动n位,缩小倍数,一个数向右移动n位,结果为这个数除以2的n次方(除不尽单独考虑)8>>2=8/2
>>>无符号的右移,不考虑符号位,将这个数整体往右移动n位
^n异或
~n数值取反
  //正整数的移位  <<   >>   >>>
        System.out.println(3<<2);  // 12
        System.out.println(7<<3); // 7*8=56

        // 对于正数的无符号右移和 右移 结果一样
        System.out.println(16>>2);// 4
        System.out.println(18>>2);// 4

        System.out.println(5^9);//12


        System.out.println(3>>2);
        System.out.println(3>>>2);

        System.out.println(~5);
// 负数的移位
        // 负数的左移位还是为负数
        System.out.println(-4<<2); // -4*2的2次方 =
        /**
         *   -4的原码: 1 0000... 00000100
         *          *   -4的反码: 1 1111... 11111011
         *          *   -4的补码: 1 1111... 11111100
         *          *   开始移位   2
         *             1 1111... 11110000
         *    最后结果 = 取反+1
         *             1 0000... 00001111  + 1
         *  :
         *             1 0000... 00010000  =-16
         */

        // 补码 = 反码+1
        //负数是对于补码 进行移位   -4/2 =-2
        System.out.println(-4>>1);

        // -16无符号右移2位
        System.out.println(-16>>>2);   //1073741820   
        // -16 的补码算出来
        /**
         * 原码  10000.. 0010000
         * 反码  11111.. 1101111
         * 补码  11111.. 1110000
         *      00111.. 1111100  由于不考虑符号,移动后高位全部补0 变成正数
         *      正数原码和补码一致 这个数即为所得
         *      1073741820
         */

6.三目运算符

​ 表达式 ? 结果1 : 结果2

当?前面成立时, 整个表达式输出 结果1 ,如果?前面不成立,则输出结果2

 // 生成100以内的随机数
        int n = (int)(Math.random()*100);
        System.out.println("n:"+n);
        System.out.println( n%2==0 ?"这个数是偶数":"这个数是奇数");

二.表达式

表达式:通过运算符和操作数组成的元素,表达是不能单独写在程序中,需要接受结果或输出
在这里插入图片描述

注意:这里的()表示方法的括号,点好表示小数点,[]表示数组的下标

2-5:用于得到结果值

6-12用于运算得到true,false

13,14:是赋值。赋值的优先级最低

语句块:

在一个方法中,可以使用{}表示一个

四.流程控制

1.定义

在一个Java程序中,各条语句的执行对程序的结果有直接的影响,也就是说,各个语句的执行顺序对程序的结果有直接影响。

在程序中,可能出现不同的执行顺序,必须自上如下顺序执行,或者 条件判断的顺序或者循环执行的顺序。

2.分类

顺序执行

条件执行

循环执行

3.顺序执行

public static void main(Srting[] args){
    System.out.println(1);
    System.out.println(2);
    System.out.println(3);
}

4.条件执行

1.if条件分支

语法:

if(条件){
   语句块
}
 其他代码  

解释:如果条件成立,则执行语句块,如果条件不成立,则不执行语句块
在这里插入图片描述

 // 生成一个100以内的随机数   判断它是否为偶数        
 int n = (int)( Math.random()*100);        
 if(n%2 == 0){            
            System.out.println("这是数是偶数");                     System.out.println("程序结束");
 }
 

2.if…else条件分支

语法:

if(条件){
   语句块1
}else{
   语句块2
}

解释:如果条件成立,则执行语句块1,如果条件不成立,则执行语句块2
在这里插入图片描述

public static void main(String[] args) {
        //一个程序猿去买菜,如果看到西瓜就买一个,如果看到葡萄就买两个西瓜
        int n =(int)(Math.random()*100);
        if (n<50){
            System.out.println("买了一个西瓜");
        }else{
            System.out.println("买了两个西瓜");
        }
    }

3.if…else if…else多条件分支

语法:

if(条件1){
   语句块1
}else if(条件2){
   语句块2
}else if(条件3){
   语句块3
}else{
   语句块4
}

解释:从条件1开始依次判断,如果条件1成立,则执行语句块1,其他条件不再执行,如果条件2成立,则执行语句块2,其他条件不再执行。。。 依次类推如果条件都不成立,则执行else语句块。 ,最终只执行其中某一个语句块,
在这里插入图片描述

public static void main(String[] args) {
        //随机生成90以内的年龄  整数
        int n = (int)(Math.random()*90);
        if (n<18){
            System.out.println("未成年");
        }else if(n>=18 && n<30){
            System.out.println("青年");
        }else if (n>=30 && n<50){
            System.out.println("中年");
        }else if (n>=50 && n<70){
            System.out.println("老年");
        }else{
            System.out.println("晚年");
        }
        System.out.println(n);
    }
}

嵌套条件判断

语法:以上3种格式,可以同时使用,在一个if语句再次嵌套if 语句

public static void main(String[] args) {
        //接收控制台输入,  判断输入的数   是否能被3整除
        //如果能被3整除,输出这个数除以3的结果,并判断结果能被7整除
        //如果不能被3整除,判断是否为偶数
        Scanner sc = new Scanner(System.in);
        //接收控制台输入的整数
        System.out.println("请输入一个数:");
        int n=sc.nextInt();
        if (n%3==0){
            int m = n/3;
            System.out.println("能被3整除结果为:"+m);
            if (m%7==0){
                System.out.println("结果能被7整除");
            }else {
                System.out.println("结果不能被7整除");
            }
        }else{
            System.out.println("这个数不能被3整除");
            if (n%2==0){
                System.out.println("这个数是偶数");
            }
        }
    }

注意 : 嵌套条件时 为了增强代码的可读性,将条件语句块的分支 往后缩进 ,{}作为一个整体

​ 条件语句块中如果只有一个输出语句, 可以省略{}

5.选择条件判断

语法:

switch(表达式){
  case 常量值1;
     语句块1break//语句块接收的标记
  case 常量值2;
     语句块2breakcase 常量值3;
     语句块3break}

注意:switch的表达式判断只能等值比较,其中case的常量值 类型位: 整数型(byte short int long ),字符型,字符串型,枚举型

byte n = (byte)(Math.random()*7+1);
        switch (n){
            case 1 :
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6 :
                System.out.println("星期六");
                break;
            default :
                System.out.println("星期天");
                break;
        }

case穿透问题

在switch中,如果case后面不写break,将会出现穿透现象,也就是说不会执行下一个case的判断条件直接往后运行,直到遇到break,或整体switch结束

练习

* 1、使用switch制作一个简单的计算器:
* 让用户输入计算数字1和运算符 及计算数字2,然后程序帮他计算出结果。
*

五.循环

1.循环定义

在Java程序中,重复的执行某一段代码这个过程称之为循环,为避免出现死循环,循环分为四部分

1.初始条件

2.循环的判断,条件为true,则进入循环体

3.循环体

4.迭代变量

while循环

语法:

初始条件
while(判断条件){
     循环体
     迭代部分(为了改变循环条件)
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zp40NYXu-1601309166045)(F:\资料\老师资料\笔记\笔记图片\1600842052900.png)]

计算1到100的累计之和1+2+3+4…+100=?

初始值 n=  1
条件:  100以内的 数可以一直累加(一直循环)
迭代: n++ 
 //计算 1到100的累加之和
        int sum=0;
        int  n=1;
        while(n<=100){
            sum+=n;
            n++;
        }
        System.out.println("n:"+n);
        System.out.println("sum:"+sum);

do…while

语法:

初始值
do{
    循环体
    迭代部分
}while(返回boolean类型的表达式4);

执行顺序:123-》423-》423-》…直到条件4为fale则退出循环。

先执行初始值1,循环体2,迭代3

再判断条件4是否成立,成立,继续执行2,3

再判断条件4是否成立,成立,继续执行2,3

判断条件4是否成立,不成立,退出

  int i=0;
          do{
              System.out.println("i--"+i);
              i++;
          }while(i<10);

        System.out.println("i===="+i);
        /**
         * 第一遍: 输出 0   i=1
         * 第二遍: 判断 1<10  成立  输出1   i=2
         * 第三遍: 判断 2<10  成立  输出2   i=3
         * .。。
         * 第九遍: 判断8<10  成立  输出8   i=9
         * 第十遍:判断 9<10  成立 输出9    i=10
         * 第十一遍: 判断 10<10 不成立。退出
         *
         *
         */

问题: while循环与do while循环的区别?

1、while循环先判断条件是否成立,再执行循环体,do while循环 先执行一遍循环体再判断条件。

break : 退出循环

for循环

for 循环的升级版就是foreach

for循环通常在明确循环次数的情况下使用,它也分为四部分

语法:

for(初始值;循环判断条件;迭代部分){
    循环体
}
或者

初始值
for( ; 循环判断条件; ){
    循环体
    迭代部分
}
//他们的区别是  初始值定义在for的外边,就可以在循环外边使用

循环执行过程:

1243-》243-》243-》243-》…》2为false循环退出

例如:循环输出5遍holle world

//i表示计数器,从1开始 到5结束
for(int i=1 ;i<=5 ; i++){
      System.out.println("hello world");
  }

循环的执行顺序:

第一遍: i=1 1<5 成立 输出“hello world ” i++ i=2

第二遍 :2<=5 成立 输出“hello world” i=3

第三遍 : 3<=5 成立 输出”hello world“ i=4

第四遍: 4<=5成立 输出”hello world“ i=5

第五遍: 5<=5 成立 输出”hello world“ i=6

第六遍: 6<=5 不成立,退出

i=6

使用for循环计算1-的阶乘

 // 使用for循环 计算 10的阶乘
        for(int i=1;i<=10;i++){
            sum*=i;
        }

for循环部分可以省略

        // 死循环
        for(;;){
            System.out.println("hello");
        }
        for(;true;){
           System.out.println("hello world");
        }
  // 迭代部分的代码 可以 放入循环体中
  int i=0;
  for( ; i<10; ){
  System.out.println("第"+i+"次输出");
  i++;
  }

六.关键字 break、continue 、return的区别

1、break : 用于在switch。。case中放置语句块穿透,

​ 用于跳出循环

 // 从1-100  遇到7的倍数 break
          for(int i=1;i<100;i++){
              // i==7 跳出循环
              if(i%7 == 0 ){
                  break;
              }
              System.out.println(i);
          }

2、continue: 跳出本次循环,继续下一次循环

 for(int i=0;i<100;i++){
              if(i%7 == 0 ){
                  continue;  // 跳出本次循环,继续下一次循环
              }
              System.out.println("i---"+i);
    }

3、return : 返回 本次方法

​ 用法1 : 如果return放在循环中, 会跳出循环,且不会只想循环外面的语句 ,

​ 用法2: 作为方法的返回值

​ 用法3 : 无论方法是否有返回值 ,可以在条件判断的位置 直接 return ,

return和break在循环语句块是,break只是结束循环语句块,对于循环外面的代码会执行,而return是结束当前所在方法的剩下的语句块。

  public static void main(String[] args) {
           for(int i = 1;i<100;i++) {
               if (i == 50) {
                   return;
               }
               System.out.println("i----"+i);
           }

          System.out.println("程序结束");

    }

   public void method1(){
         // return 还可以在条件判断的位置 直接返回方法
        int n = (int)(Math.random()*10);
        if(n%2 ==0){
            return  ; // 方法的后面就不再运行
        }
        System.out.println("方法的其他代码块");
        
    }

结论:只要执行return,那么它 后面的代码都不执行。

    public int add(){
        return 0;
       
    }

return作为方法返回值的关键字 ,

七.嵌套循环

嵌套循环: 在一个循环语句中,还包含了另一个循环。例如 在一个for循环中还有一个for循环 ,

它的总的循环次数 = 外循环的次数* 内循环的次数

语法:

  for(){    // 外层循环

		for(){   // 内层循环

		}

	}

执行顺序: 外层循环 循环一次 ,内层循环循环完整的一遍

*	*	*	*	*
 打印直角三角形
* 
* * 
* * * 
* * * * 
* * * * * 
外循环控制打印几行, 内循环控制打印即可* 
        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *
  * * * * * * *
    * * * * *
      * * *
        *

思路 : 考虑一行打多少个空格 多少个*

一共5 行 空格的个数(5-i) *的个数 (2 * i - 1)

i=1 4 1

i=2 3 3

i=3 2 5

i=4 1 7

i=5 0 9

 System.out.println("打印正三角形");
            for(int i=1;i<=5;i++){
                // 先打印空格
                for(int k=0;k<5-i;k++){
                    System.out.print("  ");
                }
                // 再打印*
                for(int j=0;j<2*i-1;j++){
                    System.out.print("* ");
                }
                // 换行
                System.out.println();
            }

九九乘法表

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
....
1*9=9 2*9=18 ......                   9*9=81

八.数组的概念和访问

1、容器的概念

​ 用于存储数据的一块内存称为容器,生活中有很多容器,例如 水杯,衣柜,书包,有一定的空间可以存放“东西”

​ 存放在容器中的数据 称为“元素”

2、为什么会存在数组呢?

​ 假如现在要存储全班同学的成绩 , 全班40人,按照定义变量的思维,需要定义40个double类型的变量,每次从40个变量中找某一个变量,操作很麻烦, Java中可以定义一个数据类型存放40个人的成绩 , 这个类型就是数组类型。

数组定义: 它是相同数据类型的有序集合

3、 数组特点

  • 数组的长度固定(数组的长度一旦声明,就不能改变)
  • 数组中存储的元素数据类型必须相同
  • 数组的元素 通过下标访问,且下标默认从0 开始
  • 数组类型属于引用数据类型, 数组的元素类型 既可以是基本数据类型,也可以是引用数据类型。

4、创建数组

方式一:
数组存储的数据类型 [] 数组名  = new 数组存储的数据类型[长度]

详解:

数组存储的数据类型 :创建数组容器中可以存储什么数据类型 (基本数据类型 ,引用数据类型)

[] : 表示数组

数组名: 给数组起给名字,遵循标识符规则

new : 创建数组的关键 字

[长度] : 数组的长度 , 这个长度定义后不可改变

例如

int [] arr = new int[3];

new出来的空间在堆内存中,数组是引用数据类型 ,存在内存地址

​ 内存解析: 在堆内存中开辟一段连续的3个长度的int类型的内存空间 ,并由arr变量指向这块内存的地址 (换句话说 arr输出的就是 这个内存的地址)
在这里插入图片描述

方式二:
 数据类型 [] 数组名 = new 数据类型[]{元素1,元素2,元素3...}

​ 这里的数组长度根据元素的个数自动分配大小

int [] arr = new int[]{90,88,78,92};
或者
int arr [] = new int[]{90,88,78,92}
方式三:
  数据类型 [] 数组名  = {元素1,元素2,元素3...};

注意: 这里的元素类型必须满足 数组的元素数据类型

 char [] arr = {'a','b','c'};
 或者
 char arr [] = {'a','b','c'};

5、数组的访问

​ 数组的访问通过索引访问

索引(下标): 每一个数组的元素都有一个编号,这个编号从0开始 , 这个编号称为数组的索引,通过数据名[索引] 访问到数组的原始

例如: 访问数组的第二个元素: 数组名[1]

数组的长度: 数组的长度 声明已固定 ,访问数组的长度 : 数组名.length

​ 数组的最大索引= 数组的长度 -1

数组元素的赋值 :通过索引可以给元素赋值 数组名[索引] = 值

​ 将数据 赋值给 指定索引的 元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值