Java学习笔记

  • 2021 年 4 月 23 日
  • 笔记

Java数据类型划分

 

 

 

 

Java中定义了四类/八种基本数据类型:

1、逻辑型——boolean

  • boolean类型适用于逻辑运算,一般用于程序流程控制
  • boolean类型数据只允许取值true或false,不可以0或非0的整数替代false和true。
  • 关系运算的结果是一个逻辑值,true或false。这个值可以保存在一个对应的逻辑类型的变量中,这样的变量类型是boolean
  • 布尔(Boolean)是为了纪念George Boole对逻辑计算的贡献
  • boolean flag = true;
  • boolean tooHigh,tooSmall,tooRough;
  • boolean done = false;

2、字符型——char

  • char型数据用来表示通常意义上“字符”
  • 字符常量使用单引号括起来的单个字符
  • 可以用一个整数代表一个char变量的值

char c1=65   等价于   char c1=‘A’;

  • Java字符采用Unicode编码,每个字符占两个字节(16位),因而可用十六进制编码形式表示
  • 字母和数字在Unicode表中是顺序排列的,大写字母和小写字母是分开排列的,并不在一起
  • 逃逸字符
    • 用来表达无法打印出来的控制字符或特殊字符,它由一个反斜杠“\”开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符
    • Java语言中还允许使用转义字符‘\’来将其后的字符转变为其它的含义

      \n(换行)  ,\b(退格)   ,\t(到下一个表格位,水平制表,即加一个Tab),

      \’(单引号),\”(双引号),\\(一个反斜线)                                                    

  • char与String(字符串)

    String不是基本数据类型,而是一个类,字符引在“   ”内

  • 字符串String
    • String是一个类,String的变量是对象的管理者而并非所有者
    • 就像数组变量是数组的管理者而并非所有者一样
    • 创建字符串
      • String s = new String(“a string”)//创建了一个String的对象
      • 用”a string”初始化这个对象
      • 创建管理这个对象的变量s
      • 让s管理这个对象
      • 初始化字符串变量
        • String s = “hello”;
        • 编译器帮你你创建一个String类的对象交给s来管理
        • 字符串连接
          • 用加号(+)可以连接两个字符串
            • “hello”+”world”——>”helloworld”
            • 当这个+的一边是字符串,而另一边不是是,会将另一边表达为字符串然后做连接
              • “I’m”+18——>”I’m 18”
              • I+2+”age”——>”3age”
              • “age”+I+2——>”age12”
        • 输入字符串
          • in.next();//读入一个单词,单词的标志是空格
            • 空格包括空格、tab和换行
            • in.nextLine();//读入一整行
        • 字符串赋值所赋予的是两方共同管理这个字符串,并不是内容
        • 字符串判断的话只会判断是否是指向同一个字符串,如需比较内容,需要使用equals()
        • 字符串操作
          • 字符串是对象,对它的所有操作都是通过”.”这个运算符来进行的
            • 它表示对.左边的这个字符串做右边的那个操作
            • 这里的字符串可以是变量也可以是常量
            • Strings大小的比较
              • 两个字符串可以比较大小:
                • s1.compareTo(s2)
                  • 如果s1比s2小,那么结果是负的;如果s1和s2相等,那么结果是0;如果s1比s2大,那么结果是正的
                • compareToIgnoreCase可以不区分大小写地来比较大小
            • 获得String的长度
              • 用length()函数

                    

            • 访问String里的字符
              • s.charAt(index)
                • 返回在index上的单个字符
                • index的范围是0到length()-1
                • 第一个字符的index是0,和数组一样
                • 但是不能用for-each循环来遍历字符串
            • 得到子串
              • s.substring(n)

              • 得到从n号位置到末尾的全部内容

              • s.substring(b,e)

                • 得到从b号位置到e号位置之前的内容
  • 加减完后就会变成整数类型,需要重新进行强制类型转换才能变成字符类型

3、整数型——byte,short,int,long

  • Java语言整型变量的三种表现形式:
    • 十进制整数,如12,-314,0
    • 八进制整数,要求以0开头,如016 → 输出为14
    • 十六进制数,要求0x或0x开头,如0x12
  • Java语言的整数型常量默认为int型
  • 声明long型常量可以加‘l’或‘L’,如: long I = 3L;
  •  

     

4浮点型——float,double

Java浮点类型有固定的表述范围和字段长度

 

 

 

 

  • Java浮点类型常量有两种表示形式
    • 十进制数形式,必须含有小数点,例如:

3.14

314.0

0.314

float a = 52;      是整数的话可以没有小数点,但输出时会自动加上小数点

    • 科学计数法形式,如:

3.14e

3.14E2

314E-2

  • Java浮点型常量默认为double型,如要声明一个常量为float,则需在数字后面加f或F,如:

double d=3.14;

float f=3.14f;

 

答案:ADF

5.   包裹类型

对于基本数据类型,Java提供了对应的包裹(wrap)类型。这些包裹类型将一个基本数据类型的数据转换成对象的形式,从而使得它们可以像对象一样参与运算和传递。下表列出了基本数据类型所对应的包裹类型:

基本类型

包裹类型

boolean

Boolean

char

Character

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

我们看到,除了int和char以外,包裹类型就是把基本类型的名字的第一个字母大写。在Java的系统类库中,所有第一个字母大写的,都是类的名字。所以在编辑程序的时候,一定要小心大小写,以免一不小心犯错。

  • 用处

获得该类型的最大最小值

    • Integer.MIN_VALUE
    • Integer.MAX_VALUE
  • 运算符
    • 当需要让一个类或对象做事情的时候,用   . 运算符
      • a.length
      • Integer.MAX_VALUE
      •  

         

 6.   数值类型之间的转换

  • 整数/小数类型之内,较短类型的值可以直接赋给较长的类型。
  • 整数值可以直接赋值给小数类型。
  • 强制类型转换—除以上情况外不同类型之间赋值均需做强制类型转换。

7.   Java引用类型

  • Java语言中除8种基本数据类型以外的数据类型成为引用类型
  • 引用le’xii’n’g’shu’ju’yi’dui’xiang’de’xing’shi’cun’zai引用类型数据以对象的形式存在
  • 引用类型变量的值是某个对象的地址,而不是对象本身
  • 声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象
  • Person p1=new Person();
  • person p1;  //创建一个引用类型的变量,准备指向一个Person类的对象
  • p1=new Person();  //调用构造方法创建对象,并使p1指向该对象

8.   基本类型的默认值

Java类的成员变量默认初始化原则

Java变量分类

  • 变量用于记录数值可变的依据
  • 按所属的数据类型划分:
    • 基本数据类型变量
    • 引用数据类型变量
  • 按被声明的位置划分:
    • 局部变量:方向或语句块内部定义的变量
      • 声明语法格式:

变量类型 变量名1[=值1][,变量名2[=值2]…]

    • 成员变量(属性):方法外部、类的内部定义的变量
  • Java变量使用前必须先声明和初始化(赋初值)
  • 变量作用域
    • 局部变量的作用域就是它所在的方法或者语句块
    • 在程序调用方法(进入语句块)时,局部变量才被创建并可用,随方法(语句块)的退出,局部变量将被销毁
    • 变量的作用域是从定义的地方开始,到包含它的最小模块结束。
    • 在变量的作用域之内不允许有其他同名的变量。
    • 成员变量依附于对象存在,具有与对象的相同的生存期和作用域。
    • 变量作用域举例:

 

 

 

运算符

    • 算数运算符:+*/%++(自加)–(自减)
    • 关系运算符:><>=<===!=
    • 布尔逻辑运算符:!&|^&&||
    • 位运算符:&|^~>><<>>>
    • 赋值运算符:=
    • 扩展赋值运算符:+=-=*=/=
    • 字符串连接运算符:+
    • 运算符优先级

优先级

运算符

综合性

1

()

括号运算符

由左至右

1

[]

方括号运算符

由左至右

2

!、+(正号)、-(负号)

一元运算符

由右至左

2

~

位逻辑运算符

由右至左

2

++、–

递增与递减运算符

由右至左

3

*、/、%

算术运算符

由左至右

4

+、-

算术运算符

由左至右

5

<<、>>

位左移、右移运算符

由左至右

6

>、>=、<、<=

关系运算符

由左至右

7

==、!=

关系运算符

由左至右

8

&(位运算符AND)

位逻辑运算符

由左至右

9

^(位运算符号XOR)

位逻辑运算符

由左至右

10

|(位运算符号OR)

位逻辑运算符

由左至右

11

&&

逻辑运算符

由左至右

12

||

逻辑运算符

由左至右

13

?:

条件运算符

由右至左

14

=

赋值运算符

由右至左

    • 逻辑运算符-操作数为逻辑类型
      • 逻辑运算符功能

—— 逻辑非         & —— 逻辑与(位运算)  | —— 逻辑或(位运算)

^   —— 逻辑异或     && —— 短路与               || —— 短路或

    • 逻辑运算符功能说明:

 

    • 短路逻辑运算符应用

&& —— 第一个操作数为假则不判断第二个操作数

  ||   —— 第一个操作数为真则不判断第二个操作数

    • 关系和逻辑操作符返回boolean结果——true、false。

注:与C/C++不同,在Java中,0不能解释为false,非0不能解释为true。

  • 位运算符操作数为整数
    • 位运算符功能

~——取反    &——按位与     |——按位或    ^——按位异或

    • 位运算符功能说明:对二进制进行运算

 

  • 移位运算符操作数为整型
    • 左移
      • “a<<b;”将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;

例:00000101<<3=00101000

    • 右移
    1. 带符号右移
      • “a>>b;”将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位

例:11111011>>3=11111111

2.无符号右移

      • “a>>>b;”将二进制形式的a逐位右移b位,最高位空出的b位补0。

例:11111011>>>3=00011111

    • 位运算符性质
      • 适用数据类型:byte、short、char、int、long,对低于int型的操作数将先自动转换为int型(32位)再位移。
      • 将a左移x位相当于乘以2^x,16<<2返回16*2²=64.
      • 将a带符号右移x位相当于除以2^x,-256>>4返回-256/2⁴=-16
  • 补充:数据的补码

补码:正数与原码相同,负数按位取反,末位加1

 

 

 

  •  赋值运算符 =
    • 当“=”两侧的数据类型不一致时,可以使用默认类型转换(变量能自动升级到更长的形式,如int值总可以赋给long变量)或强制类型转换原则进行处理

double z=12.414f;

long l=100;                //默认类型转换

int smallval=99L;       //非法

int i=(int)l;                    //强制类型转换

    • 特例:可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超过其表数范围

byte b=12;               //合法

byte b=4096;           //非法

math

  • math类是java中进行数学运算的一个类
  • abs:计算绝对值
  • pow:计算幂次
  • random:给出随机数
  • round:进行四舍五入

 

 

 

表达式

  • 表达式是符合一定语法规则的运算符和操作数的序列

a

5.0 + a

(a-b)*c-4

i<30 && i%10!=0

  • 表达式的类型和值
    • 对表达式中操作数进行运算得到的结果成为表达式的值
    • 表达式的值的数据类型即为表达式的类型
  • 表达式的运算顺序
    • 首先应按照运算符的优先级从高到低的顺序进行
    • 优先级相同的运算符按照事先约定的结合方向进行

 

char类型相加时变为int类型相加

 

输入

  • 用Scanner类可以用于读取用户在命令行输入的各种基本类型数据:
    • 布尔类型 nextBoolean()
    • 字节类型 nextByte()
    • 短整型    nextShort()
    • 整数类型 nextInt()
    • 小数        nextFloat(),nextDouble()
    • 字符串    next(),nextLine()

 

调试

  • 可以在程序适当的地方插入输出来显示变量的呢

 

分支语句

  • 分支语句实现程序流程控制的功能,即根据一定的条件有选择地执行或跳过特定的语句。
  • Java分支语句分类
    • if-else语句

 

    • switch语句

 

      • switch(表达式)中表达式的返回值必须是下述几种类型之一:int,byte,char,short;
      • case子句中的值必须是常量,且所有case子句中的值应是不同的;
      • default子句是任选的;
      • break语句用来执行完一个case分支后使程序跳出switch语句块

 

循环体

1.   while循环

  • while循环的意思就是:当条件满足时,不断地重复循环体内的语句。
  • 循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行
  • 条件成立是循环继续的条件

小套路:如果要模拟运行一个很大次数的循环,可以模拟较少的循环次数,然后作出推断。

2.   do-while循环

  • 在进入循环的时候不做检查,而是在执行完一轮循环体的代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环

do

{

<循环体语句>

}while(<循环条件>);

 

do-while循环和while循环很像,区别是在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。

3.   for循环

  • for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进进行调整,比如加1或者减1

for ( i=0; i<5; i=i+1){

System.out.println(i);

}

for ( 初始化; 条件; 单步动作){

}

  1. 第一部分是一个初始化,可以定义一个新的变量:int count=10或者直接赋值:i=10。
  2. 第二个部分是循环维持的条件。这个条件是先验的,与while循环一样,进入循环之前,首先要检验条件是否满足,条件满足才执行循环;条件不满足就结束循环。
  3. 第三部分是步进,即每轮执行了循环体之后,必须执行的表达式。通常我们在这里改变循环变量,进行加或减的操作。

注:循环控制变量i只在循环里被使用了,在循环外面它没有任何用处。因此,我们可以把变量i的定义写到for语句里面去。

for中的每一个表达式都是可以省略的for(;条件;) == while(条件)

4.   break&continue

  • break:跳出循环
  • continue:跳过循环这一轮剩下的语句进入下一轮
  • 在循环前可以放一个标号来表示循环:
    • label:
  • 带标号的break和continue对那个循环起作用

数组

  1. 数组的定义

一维数组的声明方式:

type var[] 或type[] var (推荐使用这种方式);

例如:int a[ ];

  int[ ] a1;

  double b[ ];

  Mydate[ ] c;    //对象数组,暂不用了解

注:Java语言中声明数组时不能指定其长度(数组中元素的个数),例如:

int a[5];        //这是非法的

若要指定数组长度,应:a=new int[5];

2.数组的使用

定义并用运算符new为之分配空间后,才可以引用数组的中的每个元素

数组元素的引用方式:数组名[数组元素下标]

数组元素下标可以是整型变量或整型表达式。如a[3],b[i],c[6*i];

数组元素下标从0开始;长度为n的数组合法下标取值范围:0~n-1;

如int a[]=new int[3];可以引用的数组元素为a[0]、a[1]、a[2]

每个数组都有一个属性lenth指明它的长度,例如:a.length 指明数组a的长度(元素个数);

 

函数

  1. 函数的定义与调用

Java的函数必须定义在类的内部,成为类的成员。定义一个函数,要像这样写:

<返回类型> <方法名称>(<参数表>) {

<方法体>

}

返回类型是这个函数运行结束时要返回给调用者的数据的类型,函数可以返回基本数据类型、对象或者void。返回void表示这个函数不返回任何值。函数名称是一个Java名字,一样要遵循和变量一样的命名规则。参数表是0个或1个或多个参数定义,用逗号 ‘ , ‘ 分隔。

在这个阶段,我们要在所有的函数的返回类型前面加上关键字“static”。static表示这个函数属于这个类,而不属于这个类的任何对象,因此我们才可以不制造这个类的对象,而直接从main()函数中调用它。

当一个函数被调用时,程序就转到这个函数中去运行,函数体里的语句就一条一条地被调用。一旦函数运行结束,就又回到调用它的地方去继续运行。