总结笔记二
01-标识符
-
概念 : 就是自己给类, 方法, 变量..起名字的符号
-
大白化理解 : 自己起的名字都是标识符
-
-
规则 :
-
26个英文字母, 数字0-9, _ $
-
数字不能开头
-
不能是Java中的关键字
-
严格区分大小写
-
-
规范 :
-
小驼峰命名法 : 变量
-
如果是一个单词, 所有单词小写 age
-
如果是多个单词, 从第二个单词开始首字母大写 maxAge
-
-
大驼峰命名法 : 类
-
如果是一个单词, 首字母大写 Student
-
如果是多个单词, 每个单词首字母大写 GoodStudent
-
-
今天的规范如果不能完全掌握, 最起码要做到一点
起名字的时候, 一定要见名之意
int age = 10;
int score = 100;
String name = "张三";
02-数据类型
-
基本数据类型
-
整数
-
byte 1个字节 -128~127
-
short 2个字节
-
int 4个字节
-
long 8个字节
-
-
小数
-
float 4个字节
-
double 8个字节
-
-
字符
-
char 2个字节
-
-
布尔
-
boolean 1个字节
-
-
-
引用数据类型
今后定义变量的使用选择:
1. 如果要定义的是整数类型变量, 首选int, 发现int装不下了, 换成long(定义long类型变量需要加入L的标识)
2. 如果要定义的是小数类型变量, 首选double, 非要定义float类型的变量(需要加入F的标识)
-
细节
所有整数默认int类型
System.out.println(10);
所有小数默认double类型
System.out.println(10.0);
03-键盘录入
-
介绍 : 可以让程序中所使用的变量更加灵活
-
步骤 :
-
找符咒 (导包)
import java.util.Scanner;
注意 : 这句代码一定要写在类定义的上方位置-
召唤精灵 (创建对象)
Scanner sc = new Scanner(System.in);
注意 : sc是变量名, 可以直接改变, 其他的都不允许改变-
指挥精灵干活
// 录入整数
int num = sc.nextInt();
// 录入字符串
String name = sc.next();
// 录入小数
double a = sc.nextDouble();
// 录入布尔
boolean b = sc.nextBoolean(); -
04-算数运算符
+ - *
---------------------------------
/ : 整数相除结果只能得到整数, 如果想要得到小数, 需要有小数参与运算
%(取模) : 得到的是除法之后剩下的余数
05-字符串的拼接操作
当 + 号操作过程中, 如果遇到了字符串, 这时就是字符串连接符, 而不是算数运算符了
System.out.println("年龄为" + 23 + 1); // 年龄为231
System.out.println("年龄为" + (23 + 1) ); // 年龄为24
Scanner sc = new Scanner(System.in); System.out.println("请输入两个整数:"); int num1 = sc.nextInt(); int num2 = sc.nextInt(); // 3 + 4 = 7 System.out.println(num1 + " + " + num2 + " = " + (num1 + num2) );
06-自增自减运算符
-
++ , --
-
让变量自身的值 + 1
-
让变量自身的值 - 1
-
注意 : 这两个符号只能操作变量, 不能操作常量
1. 单独使用(推荐) ++,-- 在前在后没有区别 int a = 10; a++; ++a; 2. 参与运算使用 ++在前: 让变量先自增, 再参与运算. int a = 10; int b = ++a; sout(a); // 11 sout(b); // 11 ++在后: 会先将该变量原本记录的值, 提取出来参与运算, 然后再自增 int a = 10; int b = a++; sout(a); // 11 sout(b); // 10
-
任务 :
public class OperatorTest2 { /* 看程序说结果 */ public static void main(String[] args) { int a = 10; int b = ++a; int c = b++; System.out.println("a=" + a); System.out.println("b=" + b); System.out.println("c=" + c); System.out.println("---------------------"); int x = 3; int y = (++x) + (x++) + (x * 10); System.out.println("x=" + x); System.out.println("y=" + y); } }
07-类型转换 - 隐式转换
-
基本的隐式转换 :
-
取值范围小的数据, 给取值范围大的数据赋值, 可以直接赋值
-
简单理解 : 小的给大的, 可以直接给.
-
-
取值范围从小到大 :
-
byte short int long float double
-
注意 : 虽然float占用4个字节, 但是取值范围要比8个字节的long更大一些
-
小数的二进制存储比较节省空间
-
-
-
-
运算过程中的隐式转换 :
-
取值范围小的数据, 和取值范围大的数据在一起运算, 小的会先将自己提升为大的, 保证数据类型统一, 然后再进行运算
-
byte short char 在运算的时候, 都会直接提升为int类型进行运算.
-
08-类型转换 - 强制转换
-
将取值范围大的数据, 给取值范围小的变量赋值, 不能直接赋值, 需要强制转换
-
简单理解 : 大的给小的, 不能直接给, 需要强转
-
-
注意 :
-
今后尽量减少强转的使用, 因为[有可能]会出现精度的损失
double a = 12.3; int b = (int)a; System.out.println(b); // 12
-
09-类型转换的面试题
public class ChangeTypeTest1 { /* byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2; 问题: 以上代码是否存在错误, 如果有, 请指出并改正. 问题的原因: b1 和 b2 是两个byte类型, 在运算的时候会先提升为int 提升之后, 就是两个int在一起运算了, 运算的结果还是int 将int结果赋值给byte, 大的给小的, 需要强制转换. byte b = 3 + 4; 问题: 以上代码是否存在错误, 如果有, 请指出并改正. 疑惑: 所有整数默认都是int, 这里属于两个int相加, 相加之后, 结果还是int 将int结果赋值给byte, 大的给小的, 需要强制转换. 原因: Java中存在常量优化机制, 上述代码在编译期间(javac的时候) 就会自动将3和4进行运算, 算出一个7的结果. 会检查该数据是否在byte的取值范围内 在: 编译通过 不在: 编译失败 .class字节码文件 byte b = 7; */ public static void main(String[] args) { byte b1 = 3; byte b2 = 4; byte b3 = (byte)(b1 + b2); System.out.println(b3); byte b = 3 + 4; } }