• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

warmer123

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

java(一)

java基础

一.数据类型

   在一个程序中,都会遇到需要使用某些数据,具体数据是什么格式我们成为数据类型。如,数字,符号等统一的成为数据类型。

数据类型在Java中总共分为以下几大类:

基本数据类型:

最基础的数据类型。这个数据类型是Java中所有数据的基础。因此非常重要。

引用数据类型:

是Java中通常情况下自定义的类型,这种类型格式比较复杂,也比较多。用处比较大。

1.基本数据类型

基本数据类型安装数据的格式分为两大类

数值型:

数值型按照数据是否是整数分为:整数型和小数型(浮点型)

非数值型:

非数值型又有两种:字符型,布尔型

基本数据类型总共有八类:

  • 整数 byte short int long
  • 小数 float double
  • 布尔 boolean
  • 字符 char
    数据类型 位数 字节数 最大值 最小值
    byte 8 1 2^7-1=127 -2^7 = -128
    short 16 2 2^15-1 -2^15
    int 32 4 2^31-1 -2^31
    long 64 8 2^63-1 10^19 -2^63
    float 4 10^38
    double 8 10^308
    • byte 更多是表示流读取的数据
    • int 真正用来表示数据
    • long 用来表示时间

1kb=1024b 1MB=1024kb 1GM=1024MB 1TB=1025GB
2.引用数据类型

引用数据类型可以分为四大类:

  1. 数组类型
  2. 对象类型
  3. 接口类型
  4. 枚举类型

二.变量与常量

2.1 变量

变量其实就是指某个内存地址。内存地址中的值可以进行更新,并不是这个变量的名字可以进行更新。

变量的定义:数据类型 变量名=变量的值;

数据类型:决定了当前这个地址中存储的 数据的大小和类型。

变量名:自己起,当然有起名字的规范。

规范:

  • 首字母小写
  • 是由字母,数字,下划线,美元符组成
    • 只有_$,其他的都不行
    • 也可以使用汉字(但是不建议使用)
  • 不能以数字开头
  • 见文知意
    • 通过英文翻译,不要写拼音
      • 年龄 age
      • 身高 height
  • 驼峰法
    • 当变量由多个单词组成时,从第二个单词开始,首字母大写
    • 目的就是告诉其他程序员,他们是多个单词组成的
    • studentName studentAge
  • 不能使用关键字、保留字
    • 定义的时候就会报错

变量的值:表示当前内存地址中到底存储的是什么数据。

                =  代表的赋值符的意思    把右边的值赋值左边

案例:

    // 定义一个整型变量,变量值为100;
   int num=100;
    // 定义一个字符型变量,变量值为'z'
    // 字符的定义,需要将值用单引号括起来,只能写一个字符。
    char ch='z';
    // 定义一个单精度的变量 值为10.1
    // 单精度变量在定义时,如果有初值,需要指明这个值时float类型,因为默认情况下小数类型的值时double类型
    // 指明方式,在值的后面添加一个f区分
    float fl=10.1f;
    // 定义一个布尔类型变量,值为true
    boolean boo=true;
    // 定义一个长整型的变量,变量值为1000;
    long loo=1000;

2.2常量

常量其实就是在变量的基础上将内存中的值定义死,内存中的这个值在定义时就已经确定了,不可以进行改变。

2.3数据类型转化

自动类型转化与强制类型转化

基本数据类型之间的相互转化

注意:布尔类型不能与其他基本数据类型之间相互转化

    // 整数之间的相互转化比较简单,直接自动或者强转按照取值范围可以了
    // 除此意外,整数与小数之间的数据类型转化。
    // 浮点型取值范围最小的是float,占用四个字节。
    // 整数型符合公式计算取值范围,但是小数不符合。
    // float的取值范围与int的取值范围是不一样的,比long的取值范围还要大。
    // 小数转化为整数,都需要强转,整数转化为小数,都是自动类型转化。
    long l=1000;

    float f=l;//这里可以自动转化
    float ff=11100.1f;
    long ll= (long) ff;// 这里需要强制转化。
    double d=110.0;
    long lll= (long) d;

    // 字符与整数型直接也可以进行转化。只是字符转化为整数是,是将当前字符的ASCII值当做数据进行转化。
    // 数字转化为字符,是将数字对于的ASCII值的字符表示出来。
    // 字符能够自动转化为整型,如果需要转化为小于整型的数据类型需要强转,传递性转化。

    char c='a';
    int i=c;// 默认字符转化为整型
    long lo=c;// 现将字符转化为int类型,然后再转化为long类型
    short s= (short) c;//强转,现将字符转化为int类型,再强转为short类型
    System.out.println(i);
    // 整数型转化为字符型,整数型转化为字符型,需要强转
    byte ci=100;
    char cha=(char)ci;
    System.out.println(cha);

三.运算符与表达式

3.1表达式

表达式其实就是数学中的算式,是由各种运算符号组合而成的。比如1+1=2 就是一个表达式。

3.2 运算符

在开发过程中,通常都需要进行运算得到某个结果。运算的过程中就需要用到运算符。

在Java学习中常见的运算符分类有:

  1. 赋值运算符 = 在数学中“=”右边 是结果,左边是表达式,在程序中 左边是变量 右边是表达式。
  2. 算数运算符 + - * / %
  3. 比较运算 > >= < <= == !=
  4. 逻辑运算符 & && | || !
  5. 位运算符(了解) & | ~ ^ << >> >>>
  6. 一元运算符(重点) ++ -- += -= *= /= %=
  7. 三元运算符 变量 = 条件?值1:值2
    3.2.1 逻辑运算符
    逻辑运算符是正对布尔类型的表达式或者值进行运算的,结果也是一个布尔类型的结果。
    运算公式是固定的。
    与或非
    &和&&(记住)
    &:按位与,不管&符号左边的表达式结果是真是假,右边的表达式结果都会进行判定。
    &&:短路与,只要&符号左边的表达式结果是假,右边的表达式就不会判断,最终的结果都为假。节省资源。
    |和||(记住)
    |:按位或,不管或符号左边的表达式结果是真是假,右边的表达式结果都会进行判定。
    ||:短路或,只要或左边的表达式结果是真,右边的表达式就不会判断,最终结果是真,节省资源。

^ 符号异或:

运算规则:相同为假,不同为真

5^20= 17

0000-0101

0001-0100 ^


0001-0001=17

5^5 = 0

0^5 = 5

任何数与自己本身相异或,结果都是0,任何数与0相异或,结果都是其本身。

778=8

787=8

异或可以使用交换律

左右移动:

左移动: 二进制相左移动多少位

3<<2 = 12
  0000-0011
  0000-1100

右移动:二进制数相右移动多少位

3>>2=0
  0000-0011
  0000-0000

结论:左移动多少位其实就是这个值乘以2的多少次方

		右移动多少位就是这个值除以2的多少次方取证。

无符号右移动:计算规则与右移动一样,只是不带符号位。“>>>”

3.3 一元运算符

++ -- += -=

++ 写法有两种

a++ : 先将a的值参与运算,在让a自增

++a:先让a自增,然后将自增后的值参与运算。

都等价于二元运算符 a=a+1,自增1

        int i=10;
        int a=1;
        int z=1;
        int y= a++ + ++i+ ++z;
        System.out.println(y);
        /*int b=i+ (++a);// 10+2
        int c=i+ (z++);//10+1
        System.out.println(b);// 12
        System.out.println(c);//11
        System.out.println(a+"----"+z);*/

-- 和++ 一样,--是自减1

a--; 先将a的值参与运算,在让a自减

--a;先让a自减,然后将自增后的值参与运算。

都等价于a=a-1;

+= -=

a+=n;n是某个数,等价于a=a+n;

自增n

如: a+=3;==>a=a+3;

a-=n;等价于a=a-n;

自减n

如:a-=3;===>a=a-3;

3.4 三元运算符

经过三次运算 变量=条件?值1:值2;

  1. 条件判断,判断这个条件是否为真。逻辑运算
  2. 如果条件为真,取值1,否则取值2。取值运算
  3. 将结果赋值给变量 赋值运算。

案例:需要求出两个数中的最大值和最小值

        int a=230;
        int b=34;
        // 可以使用三元运算符得到ab中的最值、
        int min=a>b?b:a;
        int max=a>b?a:b;
        System.out.println("最大值是"+max);
        System.out.println("最小值是"+min);

案例:给三个值,判断能否构成一个三角形,如果可以,判断是否可以构成一个直角三角形。(用三元运算符完成)

四.流程控制语句

流程控制语句总共常见的有:

  1. 顺序语句: 自上而下,逐一执行。

  2. 分支语句:

  3. 选择语句:

  4. 循环语句:
    4.1分支语句
    分支语句就是判断语句,在开发过程中往往会遇到当某个条件满足时需要执行某些代码,不满足时执行其他代码等。此时如果想要实现这种结构,就必须要使用判断语句。
    写法:
    If结构的写法:
    if(判断条件){
    //条件满足时需要执行的代码块
    }
    if else 结构的写法:
    if(判断条件){
    //条件满足时需要执行的代码块
    }else{
    // 条件不满足时需要执行的代码块
    }
    if ... else if 结构的语法:
    if(判断条件1){
    //条件1满足时需要执行的代码块
    }else if(判断条件2){
    // 条件2时需要执行的代码块
    }...
    else if(判断条件n){
    // 条件n时需要执行的代码块
    }else{
    // 以上条件都不满足时需要执行的代码块
    }
    分支语句的使用选择
    一般情况下:如果判断条件只有一个,会选择if或if else,如果这个条件需要操作条件不满足的操作,就选择 if else.
    多个条件判断选择if... else if判断。
    举个栗子:
    判断输入的用户名和密码是否正确,如果正确输出登录成功,不正确输出用户名或密码错误。
    String userName="zhangsan";
    String passWord="123456";
    if("admin".equals(userName)&&"123456".equals(passWord)){
    System.out.println("登录成功...");
    }else{
    System.out.println("用户名或者密码不正确...");
    }

    例题:

    1. 判断小名的数学成绩是否及格 (60分及格,满分100分)
      2.小名的成绩如果及格,判断属于什么等级, 60-75及格 76-90 良好 大于90优秀
      int score=80;
      if (score<60){
      System.out.println("不及格");
      }else if(score>=60&&score<=75){
      System.out.println("及格");
      }else if (score>75&&score<=90){
      System.out.println("良好");
      }else if(score>90&&score<=100){
      System.out.println("优秀");
      }else{
      System.out.println("分数不正确");
      }

    案例:请使用分支语句完成判断某个月份属于哪个季节。
    int month=8;
    if (month3||month4||month5){
    System.out.println("春天");
    }else if (month
    6||month7||month8){
    System.out.println("夏天");
    }else if(month9||month10||month11){
    System.out.println("秋天");
    }else if(month
    12||month1||month2){
    System.out.println("冬天");
    }else{
    System.out.println("月份不对...");
    }
    对于某些零散的值的判断,如果再使用if else if来进行判断,效果是可以达到的,但是天剑判断可能比较复杂。此时可以选择另一种控制流程语句--选择结构

4.2 选择结构

格式:

switch(表达式或变量){
	case 值1:
		// 值1匹配成功需要执行的代码
		break;
	case 值2:
		// 值2...
		break;
		.....
	case 值n:
		break;
	default:
		//以上选项都没有匹配成功,执行这里
		break;
}

        int a=5;
        switch (a){
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            default:
                System.out.println("休息");
                break;
        }

switch语句的书写规范:

case的作用:

		表示选项的作用,case后面必须要存放满足指定表达式结果或者变量类型的值。或者能够自动转化为指定变量类型的值。

		case由于是选项的作用,只要当前case选项被选中,剩下的所有的case选项都不会再被选择。每个选项是不重复的,也就是说,case后面跟的值不			能重复。否则就会报错。同时case之间是不存在书写顺序的。

default作用:

		当所有的case选项都没有被选中时,执行这里的代码。其它功能与case是一样。

break在switch中的作用:

		跳出当前选项,结束当前选择。当执行到这条语句是,表示当前的switch已经结束了。如果没有书写break,程序会按照顺序往下接着执行。

表示式结果或变量的类型:

	switch语句默认表达式结果类型支持整型 int。

	从JDK版本1.5开始支持枚举 enum

	从JDK版本1.7开始支持字符串 String

也就是说:

switch 支持int enum String 这三种类型,但是在基本数据类型中不分基本类型可以自动转化为int类型,因此也可以支持

如: byte  short char.

switch支持六中数据类型: byte short char int String enum

public class SwitchDemo2 {
    public static void main(String[] args) {
        int month=10;
        switch (month){
            case 12:
            case 1:
            case 2:
                System.out.println("冬天");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春天");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏天");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋天");
                break;
            default:
                System.out.println("月份不对");
                break;
        }
    }
}

4.3 循环结构

4.3.1循环三要素

循环三要素是用来控制某个循环的执行次数,如果没有这个条件,当前循环可能出错,也可能出现死循环(循环永远听不下来)。

1 初始变量:用于参与循环条件的判断,控制循环条件是否满足。

2 循环条件:用于控制循环是否执行,如果条件满足,执行循环体,不满足不执行循环体。

3 变量变化:用于改变初始变量的值从而达到循环条件是否满足需求。

4.3.2 直到型循环

直到型循环在java中,使用do...while实现

写法:

do{
    循环体
}while(循环条件);

直到型循环是不管循环条件是否满足,都会先执行一次循环体。直到型循环至少执行一次循环体。

public static void main(String[] args) {
    // 输出100次Hello World
    int i=1;//初始化变量
    do{
        // 需要在循环体中输出100次Hello World
        System.out.println("Hello World"+i);
        // 每执行一次循环体后,都将i的值自增1
        i++;//i相当于在记录循环了多少次
    }while (i>100); //i是记录循环了多少次,如果i还没有到达100,说明输出的次数不够还需要继续执行循环体
    // 由于dowhile循环先执行循环体,再判断循环条件,所以不管循环条件是否满足都会先执行一次循环体
}

例题:需要计算1-100的和。

1+2+3+4+....+99+100

    public static void main(String[] args) {
        // 1-100的和  最终需要的是结果
        int num=0;//定义一个结果
        // 定义初始化变量,从1开始
        int i=1;
        do{
           //  num=num+i;
            num+=i;
            i++;//变量的变化
        }while(i<=100);
        System.out.println(num);
    }

案例:计算等差数列 1,3,5,7,9,...,99的值

        int i=1;
        do{
            //  num=num+i;
            num+=i;
            i+=2;//变量的变化
        }while(i<=99);
        System.out.println(num);

案例:计算 1/2+2/3+3/4+....+9/10的结果

    public static void main(String[] args) {
        double i=1;
        double sum=0;
        do {
            sum+=i/(i+1);
            i++;
        }while (i<10);
        System.out.println(sum);
    }

4.3.3 当型循环

当型循环在java中,使用while和for循环两种实现

只有循环条件满足的时候才会执行循环体。

while循环的格式:

while(循环条件){
	// 循环体
}

for循环的格式:将三要素动包含在循环上,使代码更加简介阅读性强。

for(初始变量;循环条件;变量变化){
	//循环体
}

    public static void main(String[] args) {
        // 输出1-100
        int i=1;
        while (i<=100){
            System.out.print(i+" ");
            i++;
        }
        System.out.println();
        // 使用for循环书写

        for (int j = 1; j <=100 ; j++) {
            System.out.print(j+" ");
        }

        System.out.println(i);//可以取到
       // System.out.println(j); // 取不到
    }

for循环在循环结束后会将三要素中的初始化变量从内存中销毁,节省内存,但是while循环无法销毁初始化变量。因此while循环的初始化变量会在当前方法结束后才会被销毁。这样占用一段时间内存。

4.3.4 循环的嵌套与DEBUG

在开发过程中,循环使用的地方比较多的,同时还会在循环中使用循环。此时称为循环的嵌套。嵌套的循环在运行时逻辑是比较复杂的。需要有一定的梳理能力。

for(int i=1;i<=10;i++){
	for(int j=1;j<=10;j++){
		System.out.println("Hello");
	}
}

请问在控制台输出了多少次Hello. 100次

想要捋清楚这个逻辑,就必须学会debug

一般循环嵌套用的最多的是2层嵌套。能够打印一个平面信息。

4.3.5 break&continue&return

循环的结束除了使用循环条件以外,还可以使用某些关键字停止循环。

break 结束当前循环。

continue 结束本次循环进行下次循环

return 终止当前方法。

本文来自博客园,作者:{warmer},转载请注明原文链接:{https://www.cnblogs.com/warmerws}

posted on 2022-06-27 17:20  warmws  阅读(49)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3