定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
官方地址:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使 用。自己命名标识符时要避免使用这些保留字 goto 、const
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
技巧:凡是自己可以起名字的地方都叫标识符。
1.由26个英文字母大小写,0-9 ,_或 $ 组成
2.数字不可以开头。
3.不可以使用关键字和保留字,但能包含关键字和保留字。
4.Java中严格区分大小写,长度无限制。
5.标识符不能包含空格。
包名:多单词组成时所有字母都小写:xxxyyyzzz 以公司域名的逆序作为基础包名
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个 单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
注意1:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
注意2:java采用unicode字符集,因此标识符也可以使用汉字声明,但是不允许使用。
内存中的一个存储区域
该区域的数据可以在同一类型范围内不断变化
变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
变量的作用: 用于在内存中保存数据
Java中每个变量必须先声明,后使用
使用变量名来访问这块区域的数据
变量的作用域:其定义所在的一对{ }内
变量只有在其作用域内才有效
同一个作用域内,不能定义重名的变量
语法:<数据类型> <变量名称>
例如:int var;
语法:<变量名称> = <值>
例如:var = 10;
语法: <数据类型> <变量名> = <初始化值>
对于声明在方法内的变量 必须在使用之前至少有一次赋值操作
Java是强类型语言 意味着所有的变量都必须有一个明确的类型
类型的作用就是决定变量在内存中分配的空间大小
局部变量:声明在方法上或方法内的变量
成员变量:声明在类的内部,方法外的变量
区别:
作用范围:
成员变量得作用范围是整个类
局部变量的作用范围是整个方法内
初始化:
局部变量:在使用之前必须有一次赋值操作
成员变量:可以在使用之前不赋值 在于他有默认值
声明整型变量时 针对不同的类型 应进行合理赋值 不要超出期表示范围
对于long类型来说 数据末尾需要加L/l进行标记
:
如果使用float来表示浮点型数据 需要在数据的末尾加F/f
char 型数据用来表示通常意义上“字符”(2字节)
字符在Java中采用单引号 使用双引号引起来的叫字符串
字符就是单个字母 或汉字 或数字
字符常量是用单引号(‘ ’)括起来的单个字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。 例如:char c3 = ‘\n’; // '\n'表示换行符
直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表 一个十六进制整数。如:\u000a 表示 \n。
char类型是可以进行运算的。因为它都对应有Unicode码。
boolean 类型用来判断逻辑条件,一般用于程序流程控制:
if条件控制语句;
while循环控制语句;
do-while循环控制语句;
for循环控制语句;
boolean类型数据只允许取值true和false,无null。
不可以使用0或非 0 的整数替代false和true,这点和C语言不同。
Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达所操作的 boolean 值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false 用0表示。———《java虚拟机规范 8版》
将世界上所有的符号都纳入其中 ,每一个符号都给予一个独一 无二的编码
整型与字符型:byte short char int long
byte short char 可以直接转换为int
byte short char 类型之间不能相互转换
int 也可以直接转换为long 需要在数据的结尾添加L
浮点型:float double
float 也可以直接转换为double
特殊情况:
long --> float
可以转换
float 32位 使用最高位1位表示符号位 8位表示E 23位表示小数
long转换为float 可以自动转换 但是这种转换之后E后的数据具有不确定性 尽量不用
long到double时同样的
语法: 接受类型 变量名 = (将要转换的类型)待转换变量
{ int a = 1;
char b;
b = (char)a; //强制转换格式
}
1.整数型转换为浮点型(小到大):
long --> float
可以转换
float 32位 使用最高位1位表示符号位 8位表示E 23位表示小数
long转换为float 可以自动转换 但是这种转换之后E后的数据具有不确定性 ==尽量不用==
long到double时同样的
2.浮点型转换为整数型(大到小)
进行转换的时候会舍弃小数位
3.boolean 类型占一个字节的空间
boolean true/false --> 1 / 0
理论上一位(bit)就可以保存boolean 但是最小的存储单元时byte (字节) 所以在分配空间时 依然分配一个字节
boolean类型不可以转换为其它的数据类型。
4.String类型:
不属于8中基本类型 属于引用类型
使用方式与基本数据类型一致。
二进制 0 1
八进制 0 1 2 3 4 5 6 7
十进制 0-9
十六进制 0-9 A-F
(1)正数 的原码 反码 补码都是一样
(2)负数 原码 将一个负数表示程二进制
反码 按位取反 0变1 1 变0
补码 反码+1
为什么要使用原码、反码、补码表示形式呢?(补码运算)
就在与计算机无法识别符号位 所以在运算中 将符号位也参与运算 只有加法没有减法
( Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;
当是long类型时,二进制默认占64位,第64位是符号位)——左数第一位符号位
每三位2进制表示一位8进制
每四位二进制表示一位16进制的数
要将一个十进制的数转换为八进制或十六进制 首先转换为2进制
十进制直接表示
二进制直接使用01表示
八进制表示的时候一般在数据的前边加0 014
十六进制表示的时候一般在前边加上0x 表示是十六进制表示 0xC
练习:
System.out.println(bb1);输出时 所有的整数都按照int类型输出
包括:
算数运算符
逻辑运算符
赋值运算符
关系运算符
位运算
三元运算符
算数运算中 byte short char int 运算的结果都是int类型
运算中如果有long类型存在 则结果long类型
在整数类型及char类型做运算的时候 如果操作数如果时byte short char 那么运算的结果是int
如果其中有int类型的操作数 结果肯定是int
如果操作数中有long类型 结果肯定是long
如果在运算中操作数中有float类型 则结果为float
如果在运算中操作数中有double类型 则结果为double
boolean不能参与算数运算 boolean也不能和其他类型之间进行相互转换
对于/ *法运算 其中如果有负数 则结果为负
在除法运算中 取得是相除的商
%取模运算 结果为余数 结果的正负与第一个操作数保持一致
++ 自增
--自减
++ 作用都是给当前操作数+ 1
++写在操作数之后 是先取操作数的值 然后在给该数加1
++写在操作数之前 是先加1 在取值
public static void main(String[] args){
int i = 10;
i = i++;
System.out.println(i); //输出10
i = ++i;
System.out.println(i); //输出11
上述代码 特殊性情况 应避免此种用法
在一条语句中,应尽量避免对统一变量的多次运算操作。
随意给出一个整数,打印显示它的个位数,十位数,百位数的值。 格式如下:
数字xxx的情况如下: 个位数: 十位数: 百位数:
例如:
数字153的情况如下:
个位数:3
十位数:5
百位数:1
public static void main(String[] args)
{
int a = 153;
int b = a / 100;
int c = a % 100 / 10;
int d = a % 10;
System.out.println("个位数:" + d);
System.out.println("十位数:" + c);
System.out.println("百位数:" + b);
}
当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制 类型转换原则进行处理。
支持连续赋值。
① 编译报错 结果是int 应写出s = s + (short)2;
②正确 += 会进行强制类型转换
byte b = 20;
byte sum = 0 ;
// sum = b + 1;//编译不通过 因为用int到byte 会有精度损失
sum += 1; //编译通过 正常运行 其中会默认进行强制类型转换
比较运算符的结果都是boolean型,也就是要么是true,要么是false。
比较运算符“==”不能误写成“=” 。
boolean b1 = false; //区分好==和=的区别。
if(b1==true)
System.out.println("结果为真");
else
System.out.println("结果为假");//输出结果为假
逻辑运算符用于连接布尔型表达式,在Java中不可以写成33 & x<6 。
&—逻辑与 | —逻辑或 !—逻辑非 && —短路与 || —短路或 ^ —逻辑异或
&运算中只要有false 结果就为false
| 运算中 只要有true 结果就为true
! true 为false false 为true
^ 当两个不同时 则为true 相同时为false
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。左边为假,右边参与
1.x=2,y=2
2.x=2,y=1
3.x=7,y=2
4.x=7,y=1
class Test {
public static void main (String [] args) {
boolean x=true;
boolean y=false;
short z=42;
if((z++==42)&&(y=true))z++;
if((x=false) || (++z==45)) z++;
System. out.println(“z=”+z); //每一个z++都运行了
}
}
输出:z=46
位运算效率最高:位运算是对机器码二进制进行操作
面试题:使用最高效的算法 计算2的三次方
计算2的n次方 2<<(n-1)
关系运算?结果1 : 结果2;
1.表达式1和表达式2为同种类型
2.三元运算符与if-else的联系与区别:
1)三元运算符可简化if-else语句
2)三元运算符要求必须返回一个结果。
3)if后的代码块可有多个语句
获取两个数中的较大数
public static void main(String[] args){
int a =10;
int b =20;
int c = a > b ? a : b ;
System.out.println(c);//输出20
String s = a > b ? "大于" : "小于";
System.out.println(s)//输出小于
}
获取三个数中的较大数
public static void main(String[] args){
int a = 6;
int b = 2;
int c = 9 ;
int d = (a > b ?a : b ) > c ?(a > b ?a : b ) :c;
System.out.println(d);
}
交换两个整型变量的值
int a = 6;
int b = 2;
int temp = 0;
temp = a;
a = b;
b = temp;
System.out.println(a +"--"+ b);
不使用中间变量 交换两个整型变量的值
// 不使用中间变量 交换两个整型变量的值 方式一
int a = 6;
int b = 2 ;
a = a + b; // a = 8;
b= a- b; // b = 6;
a = a - b ;
System.out.println(a +"---"+b);
// 不使用中间变量 交换两个整型变量的值 方式二 二进制异或运算
int a = 6;
int b = 2 ;
a = a ^ b;
b = a ^ b ;
a = a ^ b;
System.out.println(a +"---"+b);
运算符有不同的优先级,所谓 优先级就是表达式运算中的运 算顺序。如右表,上一行运算 符总优先于下一行。
只有单目运算符、三元运算符、 赋值运算符是从右向左运算的。