Java SE笔记
二.Java编程基础
1.注释三种的方法
注释有三种:
文档注释: /** 注释 */-----------用于解释类或方法
多行注释: /* 注释 */------------用于解释方法内的逻辑
单行注释: // 注释...
2.java语言的特点:
变量必须在定义期间规定一个类型,赋值时类型必须匹配.
3.关键字
- 关键字的定义和特点
- 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
- 特点:关键字中所有字母都为小写
4.标识符:
- Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符。
- 定义合法标识符规则:
- 由26个英文字母大小写,数字:0-9 ,_或 $ 组成
- 数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。
- 标识符不能包含空格。
- 注意:在起名字的时,为了提高阅读性,要尽量有意义,“见名知意”。
元素 | 规范 | 实例 |
---|---|---|
类名 | Pascal规则 | Person StudentDemo |
变量名 | Camel规则 | age height avgValue |
方法名 | Camel规则 | getAge setUserName |
包名 | 全部小写 | com.crx |
常量名 | 全部大写 | MAX_VALUE |
5.量:
存储数据的一个基本单位
量分为: 常量 和 变量
常量指程序里持续不变的值,在整个程序运行过程中它是不可改变的
- 常见的字面量类型有:
- 整型字面常量,如:123,067,0X1D, 123L
- 浮点数字面常量,如:123.4,.18,1.8e1,1.2D,1.2F
- 布尔型字面常量,如:true,false
- 字符字面常量,如:‘a’,‘8’,‘\n’,’\u123f’
- 字符串字面常量,如:“a”,“hello”
- 引用类型字面常量,如:null
变量:jvm在内存中开辟的一个存储空间,用来存储数据
- cpu–计算机负责计算的的核心硬件
- 内存–计算机负责从硬盘中读取数据,进入内存
- 硬盘–存储数据
- 内存:用来缓存从硬盘上读取的数据
- 就可以想象成一个很大很大的存储空间
- 计算机最小单位:byte(字节)
程序通过操作变量名来操作存储空间
变量必须定义一种类型
变量的命名规则:
(1)名称由字母,数字,_和$组成,其中数字不能开头
(2)大小写敏感
(3)可以用汉字,但不建议
(4)驼峰命名法,见名知意(myDogName = “比方”)
(5)不能使用关键字(java保留字)
定义变量的格式:数据类型 变量名 = 初始化值
变量的使用规则:
(1)必须先定义(声明) 后 赋值(初始化)
(2)变量可以重复使用,即可以进行多次存取操作
不需要强调类型,但是存储数据时,一定要和声明的类型相匹配
(3)变量的作用域:变量有自己的使用范围,出了范围,变量失效
作用域:从定义开始,一直到所在大括号范围的}为止
出了作用域,若想使用,要重新定义和初始化
变量的概念: - 变量是指在程序的运行过程中随时可以发生变化的量
- 变量是程序中数据的临时存放场所
- 保存程序运行时用户输入数据
- 特定的运算结果等
变量的分类
-
按被声明的位置划分:
- 成员变量:方法外部、类的内部定义的变量
- 局部变量:方法或语句块内部定义的变量
- 注意:类外面(类对应的大括号外面)不能有变量的声明
-
按所属的数据类型划分:
- 基本数据类型变量
- 引用数据类型变量
整数类型:byte,short,int,long
byte:也叫字节类型,在内存中占8位二进制,
即在内存中占一个字节大小的空间,是数据存储的最小单位
范围:-128~127 -27~27-1
short:也叫短整型,在内存中占16位二进制
即在内存中占两个字节大小的空间
范围:-32768~32767 -215~215-1int:也叫整型,在内存中占32位二进制(10位数字)
即在内存中占四个字节大小的空间
范围-2147483648~2147483647 -231~231-1long:也叫长整型,占内存中占64位二进制
即在内存中占八字节大小的空间
范围正负922亿亿 -263 ~ 263-1
int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型,除此之外,
有如下两种情形必须指出:
1)如果直接将一个较少的整数值(在byte或short类型的表数范围内)赋值给一个byte或short变量,
系统会自动把这个整数值当成byte或者short类型来处理
2)如果使用一个巨大的整数值(超出了int类型的表数范围)时,Java不会自动把这个整数值当成long类型来处理。
如果希望系统把一个整数值当成long类型来处理,应在这个整数值后增l或者L做为后缀。推荐L
//系统会自动把56当成byte类型处理
byte a = 56;
//超出范围,不是int所在的范围
long bigValue = 9999999999999;
//强制使用long类型
long bigValue2 = 9999999999999L;
浮点数类型:float,double
小数默认为double类型,即64位,若想写32位的浮点数,需要在数值后加f/F;
若将数值1.1234567890123456789
分别存入float m 和double n,输出,查看结果
float num1 = 1.1234567890123456789f;
System.out.println(num1);
1.1234568
double num2 = 1.1234567890123456789;
System.out.println(num2);
1.1234567890123457
发现:
浮点数类型在存储数据时,会有舍入误差,即不够精确…但double比float精确
double:双精度浮点数类型精度-----绝对保证15到16位
float:单精度浮点数类型精度------绝对保证6到7位还有最后一位是舍入位
浮点数类型无法精确表示1/10,就像十进制数无法表示1/3一样
所以在运算时,多数情况下都是不精确运算
范围从大到小排序:
double>float>long>int>short>byte
精度从大到小排序:
long>int>double>float
System.currentTimeMillis();
会返回一个long类型的数据,此数据为 从1970年0时0分0秒到系统时间的所有毫秒数
字符类型:char
在内存中占2字节大小,16位二进制
凡是能用书写工具写出来的,都是字符
包括空格,换行符,制表符
赋值特点:
- 有且仅有一个字符
- 必须用单引号
另外特点: - 底层二进制是无符号的整数类型,即0~ 216-1(0~65535)
所以,赋值时也可以赋值整数.但是,存入变量空间后,是其整数对应的字符
java语言默认使用字符集位Unicode.
Unicode字符集:
无论字母,还是汉字,都占两个字节
‘A’—00000000 01000001
‘a’—00000000 01100001
‘0’—00000000 00110000
什么是字符集:
即二进制和字符一一对应的关系表
编码:将字符 —>二进制 存
解码:将二进制 —>字符 读
写文件时,采用Unicode输入的,必须用Unicode输出,否则会乱码(其他的字符集也一样)
JAVA语言常用的字符有
‘A’–‘Z’ 65-90
‘a’–‘z’ 97-122
‘0’–‘9’ 48-57
char 类型是可以进行运算的。因为它都对应有 Unicode 值
char a = 'a';
int sum = 2 + a;
System.out.println(sum);
99
JAVA语言中的转义字符:’\’:将特殊字符变成相应意义的字符
JAVA语言的特殊字符:
查看字符集中某一字符对应的整数,将字符赋值给int类型的变量,即可
int num = ‘晨’;
布尔类型:用来判断条件是否成立
- 在内存中占1个内存大小
- 只有两个值:true/false;成立/不成立;
- boolean 类型适于逻辑运算,一般用于程序流程控制:
- if条件控制语句;
- while循环控制语句;
- do-while循环控制语句;
- for循环控制语句;
- boolean类型数据只允许取值true和false,不可以0或非 0 的整数替代true和false,这点和C语言不同。
类型转换:
自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
强制转换(显式转换):范围大的赋值给范围小的类型变量,需要强制转换;
double->float->long->int->short->byte
任何类型变量转换成char都需要强制转换
语法:(强制转换类型名(范围小的))变量;
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(())但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。如: String a = “43”; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的数据类型。
6.进制
- 十进制 二进制互转
- 十进制转成二进制 除以2取余数
- 二进制转成十进制 乘以2的幂数
- 所有数字在计算机底层都以二进制形式存在
- 原码直接将一个数值换成二进制数
- 计算机以补码的形式保存所有的整数
补码的计算规则: - 正数的补码与其源码相同;负数的补码是在其反码的末位加1
- 反码:是对原码按位取反,只是最高位(符号位)保持不变
- Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位
public static void main(String[] args) {
int iValue = 233;
byte bValue = (byte) iValue;
System.out.println(bValue);
}
-23
7.算术运算符
算术运算符的注意问题
- 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数就另当别论。
- 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
赋值运算符
- 符号:=
- 扩展赋值运算符:+=,-=,*=,/=,%=
比较运算符
- 注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
- 注2:比较运算符“==”不能误写成“=” 。
逻辑运算符
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 && x<6 。
- “&”和“&&”的区别:
- 单&时,左边无论真假,右边都进行运算;
- 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
- 和“||”的区别同理,双或时,左边为真,右边不参与运算。
- 异或( ^ )与或( | )的不同之处是:对于 ^ 而言,当左右都为true时,结果为false。
位运算符
public static void main(String[] args) {
int i = 1;
boolean b = i !=1 && (i++)==2; //短路与,i++不执行
System.out.println(b); //false
System.out.println(i); //2
b = i != 1 & (i++) ==2; //短路或. i++不执行
System.out.println(b); //true
System.out.println(i); //2
}
false
1
false
2
三元运算符
- 格式:
- (条件表达式)?表达式1:表达式2;
- 如果条件为true,运算后的结果是表达式1;
- 如果条件为false,运算后的结果是表达式2;
所谓三元运算符,是对三个表达式进行的集中比较,表达式1的结果为true时,就为第二个表达式,如果为false时,就为第三个表达式。语法是:
表达式1?表达式2?:表达式3
通过下面代码说明三元运算符。
public static void main(String[] args) {
//4<3表达式的结果为true和false的其中一个
boolean n = (4<3) ? true : false;
//打印并显示结果
System.out.println(n);
}
false
Java中运算符的优先级与结合方向