标识符Identifier
Java中凡是可以由程序员自己起名字的都叫标识符。其涉及到的结构有:
包名、类名、接口名、变量名、方法名、常量名。
命名的规则:
① 由26个英文字母大小写,0-9,_ 或 $ 组成。
② 数字不可以开头。
③ 不可以使用关键字(class、int等)和保留字(goto和const),但能包含关键字和保留字。
④ Java中严格区分大小写,长度无限制。(例:class×,Class√)
⑤ 标识符不能包含空格。正确的: name, Name, user_ name ,$name , name,publicName; 错误的: 9username ,user name , public
标识符的命名规范
包名:多单词组成时所有字母都小写。(例:i miss you)
类名、接口名:多单词组成时,所有单词的首字母大写。(例:I Miss You)
变量名、方法名:多单词组成时,第一个单词首字母小写,
第二个单词开始每个单词首字母大写。(例:i Miss You)
常量名:所有字母都大写,多单词时每个单词之间用下划线_连接。(例I_MISS_YOU)命名规则和命名规范的区别:
命名规则:以上5个命名规则是Java中标识符命名时必须要遵守的规定。
任何一个规则不遵守都会引起编译不通过的情况。命名规范:以上命名规范非硬性规定,即若不遵守也不会影响程序的编译和运行。
虽然如此,但最好严格遵守这些命名规范,
标识符的命名要做到见名知意,所起名字既要贴近实际内容,
也要能让人一眼看出该标识符属于哪种结构。Java采用unicode这样的标准的国际字符集。因此,这里的字母的含义:英文、汉字等等。(不建议大家使用汉字来定义标识符!)
关键字和保留字
字符集简介
▪ ASCII 英文字符集 1个字节 ▪ ISO8859-1 西欧字符集 1个字节 ▪ BIG5 台湾的大五码,表示繁体汉字 2个字节 ▪ GB2312 大陆使用最早、最广的简体中文字符集 2个字节 ▪ GBK GB2312的扩展,可以表示繁体中文 2个字节 ▪ GB18030 最新GBK的扩展,可以表示汉字、维吾尔文、藏文等中华民族字符 2个字节 ▪ Unicode 国际通用字符集 2个字节 ISO8859-1 ▪ BIG5 GB2312 unicode utf-8,utf-16 GBK GB18030
常量和变量
常量
常量代表是程序运行过程中 不能再次改变的值
常量的作用
1.固定的值 代表计算过程中经常用到的值
便于程序计算
圆周率 3.1415926.....
2.用来代表一个含义
UP==>1 2 3 4分别代表 上下左右四个方向
什么样的值算是常量???
1.固定不变的值 算作常量
1 3.14 'a' true
可以认为所有基本类型的值 固定不变 是常量
2.特殊的常量
"abc"--->String
String是一个引用数据类型,它的值很特殊 可以简单的视为常量
3.自己创建的空间 存储一个值 让他固定起来 不能改变
final int UP = 1;
变量
变量指的是 程序执行过程中可以改变的
变量是一个内存空间(小容器)
变量空间在创建(声明)的时候 必须指定数据类型 变量空间的名字
变量空间 里面只能存储一个内容(值 引用)
变量空间内的内容可以改变
创建变量是 需要注意命名的问题
命名的规则
字母(大小写敏感) 数字(0-9不允许开头) 符号(英文符号 _ $) 中文(不推荐)
命名的规约
类名字 首字母大写 如果两个以上的单词 所有首字母都大写
SuperPerson
变量名 首字母小写 如果两个以上的单词 之后的首字母大写
superPerson
遵循驼峰式命名规约
所有名字都需要见名知义
为了增强程序的可读性
变量如何创建/声明
数据类型 变量名字;int a; String b;
编程风格
注意缩进!
定要有缩进。缩进就像人得体的衣着一样!
成对编程!
括号、引号都应该写完后,再往里加内容。
见名知意!
最基本的要求变量声明:
boolean done; long earthPopulation ; int age ;
可以在一行内声明多个变量 但要以逗号隔开:
int i ,t; // both are integers
不提倡这种风格,逐一声明每一个变量可以提高程序可读性。
可以将变量的声明和初始化放在同一行中,例如:int age = 18; float e = 2.718281828f;
整型常量
十进制整数,如:99, -500, 0 八进制整数,要求以 0 开头,如:015 十六进制数,要求 0x 或 0X 开头,如:0x15
整型变量
整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ‘(建议使用大写,
小写容易误认为数字1),如:long a = 55555555; //不出错,在Int表示的范围内(21亿内)。 long b = 55555555555;//不加l出错,已经超过int表示的范围。
需要注意:
变量是一个空间 可以只创建空间 里面不存放内容
变量空间创建后是没有默认的内容 空的
空的变量空间不能拿来使用 编译错误byte x;//声明一个变量空间 空间的名字是x 空间内要求存储的类型是byte整数 x = 1;//将一个1赋值到x空间内进行存储 计算机底层做了什么事情 1.x是什么? 变量空间 存在哪儿?----栈内存里 2.1是什么? 1是常量 存在哪儿?----常量缓冲区 3.=是什么? =是赋值 做了什么?
计算机的硬件组成
主板 CPU 声卡 显卡 网卡 电源 内存 硬盘1.硬盘上创建了一个文件 Test.java
2.文件中的内容是我们编写的源代码(跟计算机发送指令)
public class Test{ public static void main(String[] args){ byte x; x = 1; } }
3.将Test.java源文件---->编译---->Test.class
内容 我们看不懂 字节码 留给计算机识别
4.执行---->内存中执行
将硬盘上的Test.class内容 加载 到内存里
5.我们写好的指令 执行内存的空间 赋值 变化。。。。float e = 3.4F; 从double转化到float会有损失 1 3.4 常量值 存储在常量缓冲区中的 常量值的存储形式肯定不是十进制 是以二进制形式存储 1----> 32bit(int) 3.4--> 64bit(double) byte a = 1; 1--->32bit 00000000 00000000 00000000 00000001 a--->8bit 00000001 =赋值的时候做了一个自动的决定 自动类型转化 long d = 2147483648L; -2147483648 2147483647是int类型的取值范围 如果创建的常量值超过以上范围 程序编译检测的时候会认为 数字太大 如果我们真的需要那么大的数字 必须在后面加L告知 字符 字符串 char String 基本 引用 'a' "a" "abc" "" null
public class Test{ public static void main(String[] args){ byte a = 1; System.out.println(a); /*short b = 2; System.out.println(b); int c = 3;//-2147483648 2147483647 System.out.println(c); long d = 2147483648L;//如果超过int的取值范围2147483647 System.out.println(d); float e = 3.4F; // 从double转化到float会有损失 System.out.println(e); double f = 4.5; System.out.println(f); char g = 'a'; //字符 System.out.println(g); boolean h = true; //boolean 判断 对与错 System.out.println(h); String i = "abc"; //字符串 System.out.println(i);*/ } }
保存为:Welcome.java 编译阶段(编译器创建class字节码文件 ) 进入java文件所在目录,执行命令:javac Welcome.java 编译时必须加上扩展名.java。 执行阶段: 进入java文件所在目录,执行命令:java Welcome 运行的是类而非class文件,所以类名后不能加扩展名.class
代码:
如果源码在编译的过程中出现乱码,原因是因为DOS系统默认的编码方式为GBK,
这时候我需要修改源文件的编码为ANSI,这样乱码问题就解决了。public class Welcome{ public static void main(String[] args){ System.out.println("Hello java!"); } }
Windows + R 会弹出 : 输出cmd
public class HelloWorld{ public static void main(String[] args){ System.out.println("欢迎大家!"); //System.out.println("你好"); /**String name = "中国"; *int age = 20; *System.out.println(name);*/ } }
第一个正常
第二个时候大括号不建议在一列 最好分清楚那个对着那个要不然 在做程序出错的时候找代码很麻烦
第三个括号没对好但是对齐了
//对的 public class Welcome{ public static void main(String[] args){ System.out.printh("Hello World!"); } } //错误 public class Welcome{ public static void main(Sring[] args){ System oul printhn("Hello Worldr") } } //对的 pubic dass Welcome { public static vold main(StringI args) { System out println("Hello Wortdr"); } }
变量和常量的定义:
变量:程序在运行的时候,有一些量是可以改变的,我们称之为变量 常量:程序在运行的时候,有一些量是不能改变的,我们称之为常量,也就是最终变量 注意: 1.常量定义的时候需要加上关键字final 2.常量一般 变量: 数据类型 标识符 = 值 作用域 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变, 有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。
1、先声明后赋值 int a; a=10; 2、声明+赋值 int a = 10; System.out,println(a); // 输出
注意:
在类内部: 方法之外定义的变量叫成员变量(全局变量),一般会有默认值,使用之前不需要初始化 在方法内部定义的变量叫局部变量,局部变量在使用之前必须先初始化 一行可以定义多个变量,但是建议不要这样写,最好一行只定义一个变量, 也是增强代码的可读性 变量在赋值的时候,我们称这个值为常量
public class ConstantAndVar{ //成员变量 static int num; public static void main(String[] args){ //声明 //int a; //赋值 //a = 10; //声明+赋值 //int b = 20; int a = 10; a = 20; System.out.println(a); final int b = 20; //b = 30; 错误 System.out.println(b); System.out.println(num); int num1 = 0; System.out.println(num1); //int a1=100,b1=200; 不规范 int a1 = 100; int b1 = 200; } }
Java是一种强类型语言,每个变量都必须声明其类型。
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储单元,
声明格式为:▪type varName [=value] [{,varName[=value]}];
注意事项:
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
变量名必须是合法的标识符。
电脑使用内存来记忆计算时所使用的数据。人类采用旅馆来存储 外出住宿的人们。
内存中变量好比旅馆的房间,内存中常量好比住旅馆房间的人int age=20; age=21; System.out.println(age); String name=“小明”; System.out.println(name);
数据类型
基本数据类型 8个
4整型 byte short int long64
2浮点型 float 32 double 64
1字符型 char 16bit 2字节 Unicode编码 0-65535
1布尔型 boolean 1bit true falsebyte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。 short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。 int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。 long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。 float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。 double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。 boolean:只有true和false两个取值。 char:16位,存储Unicode码,用单引号赋值。
基本数据类型
整型 byte 字节型------>8个bit 敏感单元位 1byte==8bit 0 0000000 256种组合 用第一个bit位置来记录符号 0正数 1负数 数值的范围 -2的7次方 ~ 2的7次方-1 -128 ~ 127 以上的其他整数类型 依次乘2 short 2字节==16bit 65526种 -32768 32767 int 4字节==32bit -2147483648 2147483647 long 8字节==64bit float 32bit 4字节 0 000000000 00000000000000000000 字符? 'a' '+' '我' '5' 字符中数字和整数的数字冲突 为了以示区分 每一个字符的前后各加单引号 为什么英文和符号和数字是一个字节 为什么中文是两个字节? ASCII 美国信息交换标准代码 a------00000000------97 a------00000000------97 a------00000000------97 字母 数字 符号 26*2 + 10 + 100 字节256种组合
基本数据类型的类型转换
自动类型转换 和 强制类型转换
int a = 1; int b = a; 整型 byte short int long 浮点 float double 浮点类型常量: 十进制数形式,例如: 3.14 314.0 0.314 科学记数法形式,如: 314e2 314E2 314E-2 double f = 314e2; //314*10^2-->31400.0 double f2 = 314e-2; //314*10^(-2)-->3.14 float类型:单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。 double类型:双精度类型 精度是float类型的两倍,绝大部分应用程序都采用double类型。 浮点常量默认为double。要变为float,需在后面增加F/f. 如: 3.14F 浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算, 需要使用BigDecimal类。 字符 char 布尔 boolean(一位,不是一个字节) byte a = 1;//8bit -128~127 int b = a; //32bit 食堂吃饭 一碗米饭 2两碗 1两米饭/1两空气 4两碗 int a = 1000;//编译--运行 byte b = (byte)a;//127 强制类型转换 a---> 4两碗 3两米饭/1两空气 空气强制砍掉一部分 b---> 2两碗 1两米饭/1两空气 -24 00000000 00000000 00000000 00000001---只保留最后的8bit位 00000000 00000000 00000011 11101000---十进制-->二进制 除以2取余数 余数倒序排列 int a = 1;// 32bit float b = a;// 32bit ????可以 b==1.0 精确程度 long a = 1;//64bit float b = a;//32bit char---字符---'a'---0001010101---97---int char x = 'a'; int y = x;//??? y-->97
转义符:
类型之间的转换问题: 在赋值运算或算术运算时,要求数据类型相同,否则要进行类型转换 转换方式: 自动转换 强制转换 除boolean类型外,所有的基本数据类型因为各自的精度不同,赋值时都要考虑这个问题 除boolean类型外,所有的基本数据类型包括:整型,浮点型,字符型。 1.同种数据类型之间是可以直接进行赋值操作 int a = 1;int b = a;|| float x = 3.4;float y = x; 2.数据类型不同的空间 之间的赋值--->转换问题 同种大数据类型之间才能发生转换 基本类型----基本类型之间 可以直接转换(自动 强制) 引用类型----引用类型之间 可以直接转换(自动 强制--上转型 下转型) 基本类型----引用类型之间 不可以直接转换(间接--包装类/封装类) 3.保证大数据类型一致的前提下 基本类型---基本类型 小数据类型相同 都是整型 都是浮点 大空间变量可以直接存储小空间的数据 小空间变量不可以直接存储大空间的数据(需要强制类型转换) 转换过程写法都好用 如果转换的过程中数值范围超过边界 可能会有损失 byte a = 1; int b = a;//自动直接转化就可以 int a = 1; byte b = (byte)a;//需要强制类型转换 float x = 3.4F; double y = x;//自动直接转化 double x = 3.4; float y = (float)x;//强制转换 如果发现强制转换之前的数值比较大 强制转化这件事情可以 int a = 1000; byte b = (byte)a;//编译好用 执行后 b存放的值一定发生变化 小数据类型不同 整型---浮点型 两个比较精确程度 浮点型精确程度更高 可以直接存放整数 反之需要强制转换 任何一个浮点型都可以直接存放一个整型 int a = 1; float b = a;//自动直接转化 float a =1.0F; int b = (int)a;//强制类型转换 整型---字符型 每一个字符都对应这一个Unicode码 a--97 char x = 'a'; int y = x;//自动转化 y--97 int x = 97; char y = (char)x;//强制的转化 布尔类型很特殊 不能与其他基本类型之间发生转化 boolean类型有两个值,true和false boolean 类型用来判断逻辑条件,一般用于程序流程控制
基本数据类型 引用数据类型:
类型转换之前 保证大前提 同种大数据类型一致 基本--基本 可以直接转换(自动 强制) 引用--引用 可以直接转化(自动 强制) 基本--引用 不可以直接进行转化(间接-桥梁-包装类)
保证大数据类型一致的前提下(都是基本类型)
小数据类型一致 整型--整型 / 浮点--浮点 比较内存空间的大小 大数据类型空间可以直接接受小数据类型的值(自动转换) 小数据类型空间不可以直接接受大数据类型的值(强制类型转换) 强制类型转换 写法好用 但是需要注意取值范围的问题 丢失一部分数据 小数据类型不一致 整型--浮点 比较精确程度 浮点型的精确程度更高 任何一个浮点型空间都可以直接接受一个整型的值 反之需要进行强制类型转换(强行将小数点之后的部分去掉 只保留整数) 整型--字符 Unicode码 △布尔类型很特殊的基本数据类型 不能与其他的基本类型转换
引用数据类型
数组[] 类class(抽象类abstract class) 接口interface 枚举enum 注解@interface