一:关键字
Java已经赋予了特殊含义的单词,特点是都是小写字母.(Java 关键字是区分大小写的)
目前见到的关键字:
public :公共的,公开的.权限修饰符,说明后面的类或者是方法谁都可以用.
class :定义类的.
static :静态的,说明这个方法可以属于类,可以使用类名直接调用.
void :空.说明当前的方法没有返回值.
main : 不是关键字.约定俗成的程序的入口点.
二 :源文件可以写多少个类定义的演示
编译的时候一个类编译成一个.class文件,多个类生成多个.class文件
/* 演示:文件名和类名不一定保持一致 类前边如果加public,那么类名和文件名必须保持一致. 否则,文件名和类名可以不一致. 此时,编译成功的结果,字节码文件的名称和类名一致. */ // public class Demo4{ //没有public修饰,表明权限是default(默认权限:包权限) //没有定义包的话,表明都在默认包中. class Demo4{ public static void main(String[] aa){ System.out.println("hello"); } } //想要被jvm虚拟机直接运行的类必须包含main方法,否则不用定义. class Demo5{ public static void main(String[] aa){ System.out.println("hello"); } }
总结:
一般情况下:一个源文件中只定义一个类,而且这个类是public修饰的,类名和文件名保持一致.
一个源文件中可以包含多个类定义,但是public修饰的只能有一个.此源文件被编译后,类分别生成自己的.class字节码文件.
三:标识符
1:作用
用于给方法、变量、接口等命名的字符序列
2:组成规则
大小写英文字母、下划线、数字、$组成
不能以数字开头
不可以使用关键字,但可以包含关键字
java严格区分大小写
3:命名规范
类名、接口名:
多单词组成时,所有单词首字母大写
包名:
多单词组成时,所有字母小写
变量名、方法名:
多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写
final变量名:
所有字母都大写,多单词时单词之间用下划线分割
如:AAA_BBB_CCC
四:常量与变量
1:常量
Java中常量分两种: 字面量:在程序中直接出现的值 final变量:也称为final常量,这种变量一旦赋值,就不能改变.(常量名一般使用大写字符) 语法:final 常量名 = 值;
字面量:程序中直接出现的数值:
六种:
1.整数常量:直接出现的数字,不带小数点 2.小数常量:直接出现的小数.必须带小数点 3.字符常量:用单引号('')引起的 数字, 字母 ,字符. 注意:'' 不是空字符 4.字符串常量:用双引号引起的单个字符或者是多个字符."" 也是字符串,空串. 5.布尔常量:true false TRUE FALSE 严格区分大小写. 6.null常量:所有的引用数据类型的一个空值. 备注:Null不能直接打印
其中:整型常量有四种表示方式:
十进制:每位上的数只能是1-9,满10进1,默认的数值表示方式.
二进制:每位上的数只能是0,1,满2进1,以0b或者0B开头.
八进制:每位上的数只能是0-7,满8进1,以0开头.
十六进制:每位上的数只能是0-9,A-F,满16进1,以0x 或者是0X开头.
备注:进制的本质是权重, 如十进制数531,5的权重是100,3的权重是10,1的权重是1,
五:原码,补码,反码
1:正数表示形式
针对正数,三者相同. 10 -> 0000 1010 原码,反码,补码一致.
2:负数表示形式(在计算机上的表现形式)
负数用补码表示: 补码是反码+1得到: 反码是原码数值位取反得到.
原码转换为反码:符号位不变,数值位分别“按位取反”
原码转换为补码:符号位不变,数值位按位取反,末位再加1
补码转换为原码:符号位不变,数值位按位取反,末位再加1。
即补码的补码等于原码
六:变量
1:变量的三要素:
变量类型,变量名,变量值
2:定义变量的两种格式:
(1)定义和赋值一起进行:
变量类型 变量名 = 初始值;
(2)先定义,后赋值.
变量类型 变量名;
变量名 = 初始值;
3:变量的含义
变量就是一块内存空间,里面的值可以随时发生变化
4:变量的数据类型
在 Java 的领域里,基本数据类型变量存的是数据本身,而引用类型变量存的是保存数据的空间地址。
整型: 字节数 byte 1 short 2 int 4 long 8 浮点型: float 4 double(默认) 8 字符型: char 2 布尔型: boolean 1
public class VariableDemo2{ public static void main(String[] args){ //定义变量 //整型数值,如果是在前面的类型的表数范围内,可以直接赋值.!!! //系统会自动的将字面量int型转换成和前面类型匹配的类型. /* byte b = 127; short s = 128; int i = 21245487; */ //快速的获取到int型的最大值 System.out.println(Integer.MAX_VALUE);//2147483647 System.out.println(Long.MAX_VALUE);//9223372036854775807 long l = 2147483648L; long l2 = 10; //默认的类型转换 : 从小范围到大范围. //字面量的int值不能超过int的表数范围,如果超过int型最大值,加L/l后缀,表明是一个long /* //程序中出现的浮点型字面量默认是double类型 //在数值后加后缀,f/F ,明确说明数值是float类型 float f = 3.14f; double d = 3.14; char ch = 'a'; boolean bool = true; */ //变量如何使用??? // System.out.println(b);//b // System.out.println(s);// // System.out.println(i);// } }
区别:
基本数据类型: 数据直接保存在变量名所在的内存空间. 引用数据类型: 数据不是直接保存在变量名所在的内存空间,而是在另外的内存空间中. 变量名所在的内存空间保存的是一个地址值. 比如: Scanner s = new Scanner(System.in); 变量s中保存的就是等号右边的对象所在的内存地址的地址值!!!
5:变量的作用域scope
6:类型转换
类型转换: 隐式类型转换:(自动类型转换),不需要特殊的格式. 从表数范围小的到表数范围大的. 显式类型转换:(强制类型转换) 从表数范围大的到表数范围小的 特殊的格式: 变量名 = (目标类型)被转换的值; int a = (int)3.14; 强制类型转换: 针对小数:取整 针对整数:高位截断!!! double a = 128.5; byte b = (byte)a; b -> -128 先取整,在高位截断!!!
自动:由图可知byte不会自动转换为char,同时在只有byte.char.short(也可以有int型数据参与运算)类型数据参与运算时,都会自动转换成int型进行计算,char是用unicode码(int类型)参加运算,而不参加运算时则不会自动转换.
强制:
public class TypeConvertDemo{ public static void main(String[] args){ /* //自动类型转换 int a = 10; long l = a;//int -> long System.out.println(l); //强制类型转换 double d = 3.14; int b = (int)d;//截断 : 只保留整数部分 System.out.println(b);//3 */ // byte b; // b = (byte)128; // 4 个字节. /* 0000 0000 0000 0000 0000 0000 1000 0000 int型的128 截断: 从高位截断! 1000 0000 -> 被保留的结果:负数-128 */ // System.out.println(b); // // double d = 128.5; // byte b = (byte)d; // System.out.println(b); //发生了两次类型转换 // double -> byte // byte -> int int x = (byte)3.14; System.out.println(x); } }
/* 不同类型的变量进行运算,都会自动的往范围大的类型进行转型. */ public class TypeConvertDemo2{ public static void main(String[] args){ /* //int -> double double d = 3 + 1.5; //int -> long long l = 3 + 100L; short s1 = 10; short s2 = 20; // short s3 = s1 + s2;//short类型变量只要进行运算,首先无条件转换成int型. long l = s1 + 100L;//short->int->long //char参与运算实际上使用的是对应的unicode编码值. char ch = 'a'; System.out.println(ch + 1); char ch1 = (char)97;// int -> char System.out.println(ch1); */ // byte b = 10; short s = b;//ok // char ch = b; //从byte转换到char可能会有损失 } }
七:运算符
1:算术运算符
+ - * :和数学中规则一样 / :当操作数都是整型,结果也是整型,小数部分舍弃 % :结果是除法操作的余数.结果的符号取决于被模数. ++ -- :针对变量进行操作. 前++ : 先对变量增加,再使用. 后++ : 先使用变量原来的值,再增加. --同理: + : 当 + 两侧任意一侧是字符串的时候,+就是连接符.
2:赋值运算符
基本赋值运算符: = 扩展赋值运算符: += -= *= /= %= 特点:不改变等号左边的变量的类型,相当于系统自动加上了类型转换. short s = 1; s = (short)(s + 1);// int -> short s += 1; //自动类型转换
3:比较运算符
结果肯定是一个boolean类型
4:逻辑运算符
/* 演示逻辑操作符 & :两个操作数都为true,结果才为true,否则就是false | :两个操作数有一个为true,结果就为true.两个操作数都为false,结果是false. && :短路与:当左侧操作数为false时,整体的结果已经是false,右侧就不参与运算了. || :短路或:当左侧操作数为true时,整体的结果已经是true,右侧就不参与运算了. ^ :异或:两个操作数不同,结果才为true.双true,双false 结果都是false. ! :取反,单操作数,true -> false ,false->true. */ public class LogicDemo{ public static void main(String[] args){ /* //布尔常量进行逻辑运算 System.out.println(true && true); //布尔类型的变量进行运算 boolean b1 = true; boolean b2 = false; boolean b3 = true; System.out.println(b1 & b2); System.out.println(b1 | b2); System.out.println(b1 && b2); System.out.println(b1 || b2); System.out.println(b1 ^ b3); System.out.println(b1 ^ b2); System.out.println(!b1); */ //短路操作 // int a = 1; // boolean b = true && (a++) > 1; // System.out.println(a);//2 // System.out.println(b);//false // && 左侧为false,右侧不参与运算. int a = 1; boolean b = false && (a++) > 1; System.out.println(a);//1 System.out.println(b);//false } }
5:位运算符
6:三元运算符
格式: (条件表达式) ? 表达式1:表达式2; 若条件表达式值为true,整体是表达式1的值.否则是表达式2的值.
System.out.println(2>1?2:1.0); 2.0 三元运算符中表达式1和表达式2的类型不同时,整体结果将自动转型到表数范围大的类型.
7:运算符的优先级
级别为 1 的优先级最高,级别 11 的优先级最低
来源:https://www.cnblogs.com/lilz/p/10346526.html