javaSE入门 一、数据结构

本文是JavaSE入门教程的一部分,主要讲解了数据结构的基础知识,包括标识符、关键字、字面值和变量。详细阐述了变量的定义、作用、数据类型及其分类,强调了变量必须先声明再赋值的规则,并介绍了基本数据类型如整型、浮点型和布尔型的转换规则。此外,还提到了转义字符的概念。
摘要由CSDN通过智能技术生成

*在方法体当中的java代码,是遵守自上而下的顺序依次执行的,逐行执行
第一行;
第二行;
第三行;
特点:第二行的代码必须完整的结束之后,第三行程序才能执行。

*在同一个“作用域”当中,变量名不能重名,但是变量可以重新赋值。
*在不同的作用域当中,变量名是可以相同的
*java遵循“就近原则”
*类体中不能直接编写java语句【除声明变量之外】 

*字符编码:为了让计算机可以表示现实当中的文字,我们需要人的干涉,需要人负责
提前制定好“文字”与“二进制”之间的对照关系。这种对照关系被称为:字符编码
*编码和解码的时候采用同一套字典/对照码,不会出现乱码
*当编码和解码的时候采用的不是同一套对照码,会出现乱码问题。
'a' --> 97 【01100001】
'A' --> 65
'0' --> 48

*JDK中自带的native2ascii.exe命令,可以将文字转换为unicode编码形式

1、标识符

-在java源程序当中凡是程序员有权自己命名的单词都是标识符
-标识符可以标识什么元素呢?
*类名
*方法名
*变量名
*接口名
*常量名

标识符的命名规则?【不按照这个规则来,编译器会报错,这是语法】
*只能由"数字、字母、下划线、美元符号"组成,不能含有其他符号
*不能数字开头
*严格区分大小写
*关键字不能用做标识符
*理论上无长度限制,但是最好不要太长

标识符命名规范?【只是一种规范,不属于语法,不遵守规范编译器不会报错】
*最好见名知意

   *遵守驼峰命名方式

   *类名、接口名:首字母大写,后面每个单词首字母大写

   *变量名、方法名:首字母小写,后面每个单词首字母大写

   *常量名:全部大写(常量中存在多个单词,用下划线隔开)

2、关键字

48个关键字:
abstract、assert、boolean、break、byte、case、catch、char、class、
continue、default、do、double、else、enum、extends、final、finally、float、
for、if、implements、import、int、interface、instanceof、long、native、new、
package、private、protected、public、return、short、static、strictfp、super、
switch、synchronized、this、throw、throws、transient、try、void、volatile、while。
2个保留字(现在没用以后可能用到作为关键字):goto、const。
3个特殊直接量:true、false、null。

3、字面值

*字面值就是数据
*字面值是java源程序的组成部分之一。包括标识符和关键字它们都是java源程序的组成部分
*数据在现实世界是分门别类的,所以在计算机当中也是有类型的:【数据类型】
-10、100 属于整数型字面值
-3.14 属于浮点型字面值
-true、flase 属于布尔型字面值
-“abc”、“中国人” 属于字符串型字面值(java语言当中必须使用半角型双引号括起来)
-‘a’、‘人’ 属于字符型字面值(java语言当中必须使用半角型单引号括起来)

4、变量

4.1 什么是变量

 变量本质上来说是内存中的一块空间,这块空间有"数据类型"、"有名字"、"有字面值"*
 变量包含三部分:数据类型、名称、字面值【数据】*
 变量是内存中存储数据的最基本的单元

4.2 数据类型的作用?

 不同的数据有不同的类型,不同的数据类型底层会分配大小不同的空间
 数据类型是指导程序在运行阶段应该分配多大的内存空间

4.3 变量要求:

变量中存储的具体的“数据”必须和变量的“数据类型”一致,当不一致的时候编译报错

4.4 声明/定义变量的语法格式:

 数据类型 变量名; 
     数据类型:
         例:整型int
     变量名:
    只要是合法的标识符就行。规范中要求:首字母小写,后边每个单词首字母大写

例如: 
   int i;
   int age;
   int size;

 注:变量在一行可以声明多个
   int a,b,c;

4.5 变量声明之后怎么赋值?

 语法格式:
     变量名=字面值;

 要求:字面值的数据类型必须和变量的数据类型一致

 =等号是一个运算符,叫做赋值运算符,赋值运算符先运算等号右边的表达式,
 表达式执行结束之后的结果赋值给左边的变量

4.6 声明和赋值可以放到一起完成

int a=10;//此时已经给a赋值了,a=10
a=20;//此时为修改a变量的数值

例int a,b,c=100;//此时声明了a、b、c三个变量,但只有c=100,a、b还未赋值

4.7 java的变量必须先声明,再赋值,才能访问

  int i; 
  程序执行到这里,内存空间并没有开辟出来,变量i并没有初始化,所以没有赋值前是无法访问的

4.8 变量的作用域

 什么是作用域?
     变量的作用域,其实描述的就是变量的有效范围
    在这个范围之内是可以被访问的,只要出了这个范围该变量就无法访问了
    变量的作用域就只有一句话:
        【出了大括号就不认识了】
 例:如果在for循环里声明变量的话,这个变量的有限范围只局限于for循环,循环结束变量内存就没了
     如果在for循环上方声明变量,这个变量的作用域为main方法,访问的是main方法中的变量

4.9 变量的分类:

 **根据变量声明的位置来分类:**
     *局部变量
   -在方法体当中声明的变量叫做局部变量
   (局部变量在栈内存中存储)
 *成员变量
   -在方法体外【类体之内】声明的变量叫做成员变量
   -成员变量没有手动赋值系统会默认赋值【局部变量不会】
     但赋值前面要加static ,即static int t;这个系统会自动赋值t=0
   (成员变量中的实例变量在堆内存的java对象内部存储
     实例变量是一个对象一份,100个对象有100份)

5、数据类型

数据类型的作用

 指导JVM在运行程序的时候给该数据分配多大的内存空间

java中的数据类型包含两种:

基本数据类型
引用数据类型
   -类
   -接口
   -数组
   ......

基本数据类型包括四大类八小种:

 第一类:整数型
     byde(字节),      取值范围:【-128~127】                        默认值:【0】
     short(短整型),   取值范围:【-32768~32767】               默认值:【0】
     int(整型),       取值范围:【-214748348~214748347】   默认值:【0】
     long(长整型)                                                                     默认值:【0】
 第二类:浮点型
     float,                                                                                     默认值:【0.0】
     double                                                                                  默认值:【0.0】
 第三类:布尔型
     boolean            取值范围:【ture、false】                          默认值:【false】
 第四类:字符型 
     char               取值范围:【0~65535】(一个1字符,两个字节)  默认值:【\u0000】

 -八种基本数据类型的默认值是一切向0看齐
 引用数据类型的默认值为null(空值)

 注意:short和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为char没有负数。
      字符串“abc”不属于基本数据类型,属于“引用数据类型”

*字节(byde):
1 Byde = 8 bit 【1个字节 = 8个比特位,一个比特位就是一个1或者0,就是一个二进制位】
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB

*byde类型的取值范围
关于java中的数字类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位
被称为“符号位”。并且这个“符号位”在所有二进制位的最左边,0表示正数,1表示负数。

 byte类型最大值:01111111(2的七次方-1,结果是127)
 byde类型最小值:-128【与原码、反码、补码有关】
 byde类型取值范围:【-128~127】
 byde类型可以表示256个不同的数字【256个不同的二进制】

基本数据类型之间可以互相转换:转换规则

  1)八种数据类型当中除布尔类型之外,剩下的七种类型之间都可以互相转换
  2)小容量向大容量转换,称为自动类型转换,容量从小到大排序:
     byte < short < int < long < float < double
      < char  <
  注:任何浮点类型不管占用多少字节,都比整数型容量大。
      char和short表示的种类数量相同,但是char可以取更大的正整数
  3)大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过
  4)当整数字面值没有超出byde、short、char的取值范围,可以直接赋值给byde,short,char类型的变量
  **5)byde,short,char混合运算的时候,各自转换成int类型再做运算
  **6)多种数据类型混合运算,先转换成容量最大的那种类型再做运算

  注意: 
       byde b = 3;//可以编译通过,3没有超出byde类型取值范围
   int i = 10;
   byde b = i/3;//编译报错,编译器只检查语法,"不会运算"1/i
                //而当前算式中i为int类型,b为byde类型,大容量转小容量需加强制转换符
		//编译期不要掺杂自认为的运行过程(不要自己算),编译是编译,运行是运行
   byde b = (byde)i/3;//仍为编译错误,强转符将i转换为byde类型,与int类型的3运算,结果为int类型

5.1 整型

*java语言当中的“整数型字面值”被默认当做int类型来处理,要让这个“整数型字面值”被
当做long类型来处理的话,需要在“整数型字面值”后面添加l/L,建议使用大写的L(需要赋的值超过了int类型最大取值范围)

*java语言当中的整数型字面值有三种表示方式:
  第一种方式:十进制【是一种缺省默认的方式】常用                       int a = 10;    //输出10
  第二种方式:八进制【在编写十六进制整数型字面值的时候需要以0开始】    int b = 010;   //输出8
  第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】 int c = 0x10;  //输出16
  
  强制转换原理 :将左边二进制砍掉【所有的数据类型转换的时候都是这样完成的】
      例:     long a = 100L;
               int b =(int)a;
      原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
  强转之后的数据:00000000 00000000 00000000 01100100
      00000000 00000000 00000000 01100100目前储存在计算机内部,计算机存储数据都是采用补码的形式存储
  所以00000000 00000000 00000000 01100100现在是一个补码形式
  将以上的补码转换到原码就是最终的结果
  注:转换过程中(运行阶段)可能损失精度,所以强转类型谨慎使用,因为精度损失之后可能损失很严重
         例:byde a = (byde)128;
         System.out.println(a);
	 结果输出为-128
             int 128  二进制表示为  00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 
         byde 128  二进制表示为 10000000(此为补码)
	         转原码:10000000--11111111--11111111+00000001--10000000
		 他的原码看起来是一个-0,我们将它约定为-128

	 128 64 32 16 8 4 2 1

  数据存储时(最高位为1表示负数,最高位为0表示正数)
      正整数的补码是其二进制表示,与原码相同
      负整数的补码:将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
                   或符号位不变,其他位减1(00000001)取反【cpu中没有加法器,所以用负数使用补码的方式来存储
		   ,就可以使用加法器来实现减法】
           例:求-5的补码。
               -5对应带符号位负数5(10000101)→除符号位外所有位取反(11111010)→加 00000001为 (11111011)
               所以-5的补码是11111011

      补码求原码:已知一个数的补码,求原码的操作其实就是对该补码再求补码

5.2 浮点型

   float 单精度【4个字节】
   double 双精度【8个字节,精度较高】
       (1代表ture,0代表false)

   注意:double和float在计算机内部二进制存储的时候存储的都是近似值
   在现实世界当中有一些数字是无限循环的,例如:3.333333333...
   计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值

   *java语言当中的“浮点型字面值”被默认当做double类型来处理,要让这个“浮点型字面值”被
   当做float类型来处理的话,需要在“浮点型字面值”后面添加f/F

 double的精度太低【相对来说的】,不适合做财务软件
 财务涉及到了钱的问题,要求精度较高,所以SUN在基础SE类库当中
 为程序员准备了精确度更高的类型,只不过这种类型是一种引用数据
 类型,不属于基本数据类型,它是:java.math.BigDecimal

 其实java程序中SUN提供了一套庞大的类库,java程序员是基于这套基础的
 类库来进行开发的,所以要知道java的SE类库的字节码在哪,
 要知道java的SE类库的源码在哪?
     *SE类库的字节码:C:\Program Files\Java\jdk1.8.0_161\jre\lib\rt.jar
     *SE类库的源码:C:\Program Files\Java\jdk1.8.0_161\src.zip
     【每个人电脑存储位置可能不同,这是我电脑上存储的位置】

5.3 布尔型

   boolean  [true;false]

6、转义字符\

  • 转义字符出现在特殊字符之前,会将特殊字符转换成普通字符。
    \n[换行符],属于char类型的数据(一个字符)
    \t[制表符]
    '[普通的单引号]
    \[普通的反斜杠]
    "[普通的双引号]
    \u[表示后边的一串字符是某个unicode编码],注:此编码需要先用
    native2ascii.exe命令转换出来,否则会无法识别

若想输出\,
char k =‘’;
System.out.println(k);
此时会显示编译报错,因为左边的单引号缺少了结束的单引号字符
反斜杠将后边的单引号转义成不具有特殊含义的普通单引号字符
正确输出\方法
char k =‘\’;
System.out.println(k);
第一个反斜杠具有转义功能,将后面的反斜杠转义为普通的单引号字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值