1.Java基础
1.注释
单行注释 // 多行注释 /*回车 文档注释(注解)。/**回车
2.标识符
(1)Java所有组成部分都需要名字,类名,变量名以及方法名都称为标识符
(2)且标识符只能以字母、$或者_ 开始首字母之后可以任意
(3)标识符大小写是敏感的
代码演示:
public class Demo01 {
public static void main(String[] args){
System.out.println("Hello World !");
//变量名属于标识符,标识符只能以 字母、_ 和$ 开头。首字母之后可以任意
//标识符:类名,变量名以及方法名都称为标识符 (标识符大小写是敏感的)
String _dd = "d";
String $dd = "d";
String Dd = "d";
String 王者荣耀 = "d";//变量名也可以是中文(但一般不建议用中文命名)
//String class = ""; 报错 变量名不能是class
}
}
3.Java的数据类型
-
八大基本数据类型:
整型int byte short long 浮点型 float double 布尔型boolean 字符型char
-
引用类型 :
类 接口 数组 如String
代码演示
public class Demo02 {
public static void main(String[] args) {
String a = "hello"; //字符串类型
int number = 10;
System.out.println(a);
System.out.println(number);
//八大基本数据类型
//整数类型
int num1 = 10; //int hex = 0x2F01A; //十六进制
byte num2 = 127;
short num3 = 32767;
long num4 = 999999999L; //long类型要在数字后面+L 区分它是long 类型。
//此处用大写L 是为了便于区分 因为用小写l 和 1 很容易混淆,所以一般用大写L。
//浮点类型
float num5 = 50.1F; //加区分它是float类型
float num51 = 93.1f;
double num6 = 501.25666666666666666666666666666666666666666666666666;//double aa = 6e02; //科学计数法
//字符类型
char num7 = '篇'; //不能写两个字 char只能是单个字符 char num8 = 'A';
//字符串, 注意********* String不是关键字,是一个类
//String name = "打赏";
//布尔类型
boolean num8 = true;
boolean num9 = false;
}
}
public class Demo03 {
public static void main(String[] args) {
//整数拓展 进制问题 十进制 二进制0b开头 八进制0开头 十六进制0x开头
int i1 =10;//十进制10
int i2 =0b10;//二进制的10
int i3 = 010;//八进制的10
int i4 = 0x10;//十六进制的10 // 0~9 A~F
System.out.println("输出的都是十进制");
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
//浮点数拓展 银行业务怎么表示?钱
//BigDecimal 数学工具类 来比较
//float 有限 离散 舍入误差 大约 接近但不等于
//double
//最好完全避免用浮点数比较
float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f);
System.out.println(d);
System.out.println(f == d); //false
float d1 = 2123123132132f;
float d2 = d1 + 1;
System.out.println(d1 == d2); //居然是true 因为float有误差
//字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int) c1);
System.out.println(c2);
System.out.println((int) c2);
//可强制转换 所有的字符本质还是数字
//编码 Unicode 0-65536 表:97 = a 65 = A
char c3 = '\u0061'; //Unicode 编码
System.out.println(c3); //a
//转义字符
// \t \n ...
System.out.println("------------------转义字符---------------------");
System.out.println("Hello World !");
System.out.println("Hello\tWorld!");
System.out.print("Hello\nWorld!");
System.out.println("HelloWorld!" + "\n");
System.out.println("\n");
System.out.println("Hello World!");
System.out.println("\\n");
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println("//////////////////////////////////////");
System.out.println(sa == sb);
String sc = "hello world";
String sd = "hello world";
System.out.println("//////////////////////////////////////");
System.out.println(sc == sd);
//对象 从内存分析
//布尔值拓展
boolean flag = false;
if (flag == true) {} //等价于 if (flag){}
}
}
4.字节
一字节等于8位
1 Byte = 8 bit
5.类型转换
不同类型转换为同一类型 然后进行运算。
低------->高 **byte short char int long float double ** (小数优先级高于整数)
- 高到低 强制转换 (类型)变量名
- 低到高 自动转换 什么也不用写
数据类型转换注意点
/*注意点
* 1.不能对布尔值进行转换
* 2.不能把对象类型转换为不相干的类型。
* 3.高容量转低容量 强制转换 反之则自动转换。
* 4.转换时,可能存在内存溢出 或 精度问题。
* */
public class Demo03 {
public static void main(String[] args){
System.out.println("Hello World !");
System.out.println("--------字符---------------");
char c1 = 'a';
char c2 = '只';
System.out.println(c1);//a
System.out.println(c2);//中
int a = c1;
System.out.println(a);//char 转int自动转
System.out.println((int) c1);
int a1 = c2;
System.out.println(a1);
System.out.println((int) c2);//输出数字Unicode编码
//所有的字符本质还是数字
}
}
public class Demo4 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i; //强制转换
System.out.println(i);
System.out.println(b); //内存溢出 因为Byte 字节范围 -128~127
int i1 = 128;
double b1 = i1; //低到高 自动转换
System.out.println(b1);
}
}
public class Demo04 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i; //强制转换
System.out.println(i);
System.out.println(b); //内存溢出 因为Byte 字节范围 -128~127
int i1 = 128;
double b1 = i1; //低到高 自动转换
System.out.println(b1);
/*注意点
* 1.不能对布尔值进行转换
* 2.不能把对象类型转换为不相干的类型。
* 3.高容量转低容量 强制转换 反之则自动转换。
* 4.转换时,可能存在内存溢出 或 精度问题。
* */
System.out.println("----------丢失精度-----------");
System.out.println(23.7);
System.out.println((int) 23.7); //double转int
System.out.println((int) -45.89f); //float 转int
char c = 'a';//
System.out.println(c);
System.out.println((int) c);
int d = c + 1;
System.out.println(d);
System.out.println((char) d);
char c3 = '\u0061';
System.out.println(c3);
}
}
类型转换常见的问题
溢出问题
public class Demo05 {
public static void main(String[] args){
//操作数比较大时,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;//下划线并不会被输出
System.out.println(money);
int years = 20;
int total = money * years;
System.out.println(total); //输出负数原因:计算的时候溢出。
long total2 = money * years;
System.out.println(total2);//输出负数且不正确原因:1. long = int* int 先进行int*int计算溢出已经出错,才进行自动转换为long,
/*
* 分析:此处long total2 = (long)money * years;
* money * years是int 转long 本应该自动转(long total2 = money * years;)
* 但是 由于money * years数值大于int最大值,已经溢出了。所以应该转为long类型 之后相乘(long)money * years;
* */
long total3 = money * ((long) years); //int*long 先自动转成long 输出正确。
System.out.println(total3);
}
}