JavaBasic
Java 是强类型语言 数据类型不可以 直接处理 需要先初始化
数据类型
数据类型分为
-
基本类型(primitive type)
-
引用类型 (reference type)
int i =10; //10进制 输出10
int i2=010; //八进制0 输出8
int i3=0x10 //十六进制0x 输出16
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
f==d; //false
float d1 = 231313131313;
float d2 = di+1;
d1==d2; //true
float 数据类型会出现上述问题 不要用浮点数进行比较。 float 不准确。需要大的数可以用bigdecimal 来计算和比较。
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println(c2);
System.out.println((int)c1);
System.out.println((int)c2);
输出值不一样 (int) 进行了强行转换 文字的本质还是数字
97=a 65=A
char c3 = '\u0061'; // 输出 a
\a | 响铃(BEL) | 007 |
---|---|---|
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符''' | 092 |
' | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符(NUL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 十六进制所代表的任意字符 | 十六进制 |
boolean flage = true;
if(flage){ //老手
}
if(flage==true){ //新手 但是推荐新手用
}
数据类型的转换
运算中,不同类型的数据需要先转化为同一类型,在计算。
强类型转换 由高到低
int i = 128;
byte b = (byte) i //内存溢出
//b 范围 -128 到 127
// (类型) 变量
自动类型转换 由低到高
int i = 128;
double b = i; //b = 128 自动转换
注意点:
-
不可以对布尔值boolean 转换
-
不能把对象类型转换成不相干的类型
-
在把高容量到低容量时,强制转换
-
转换有可能有内存溢出和精度问题
(int) 23.7 //23
(int) -45.89f //-45
char c = 'a'; // 97
int d = c+1; // d=98
char(d) // int转换为char 输出 b
操作数据大的时候 注意溢出问题:
int money = 10_0000_0000; //_ 不会输出 方便观看
int years = 20;
int total = money * years;
//total 应该是 200_0000_0000
//但是返回-1474836488
long total2 = money * years; //依然不对 在转换之前就已经出错了
long total3 = money * ((long)years); //此时才对
变量
像学的方程 x 就是变量 一个可以变化的量
每个变量都必须声明类型
注意事项:
-
每个变量必须要有类型 --1.基本类型(primitive type) 2.引用类型(reference type)
-
变量名必须和法,不可以使用关键字作为变量名
-
要是一个完整的语句最后要加上分号; 而且一定是英文的
int a, b, c; //同时定义 但是不推荐
//代码要有可读性
int a =1;
int b =2;
int c =3;
String name = "zzz"; //定义字符串
类变量
public class Demo{
static double salary = 2500 //类变量
public void main(String[] args){
System.out.println(salary); //直接输出
}
}
实例变量
public class Demo{
//不需要初始化
int age; //实例变量
String name; //实例变量
public void main(String[] args){
Demo o = new Demo();
o.age; //使用 0
o.name; //使用 null
//除了基本类型都是默认null
}
}
局部变量
public class Demo{
public void main(String[] args){
//变量在这里是局部变量
//需要声明和初始化
//只作用在方法里
}
}
常量
一但定义就不可以改变的。 key word: final
static final double number = 1.1;
final static double number = 1.1;
//都可以 修饰符 final 和 static 顺序不影响
命名规范
变量 方法 类名:见名知意
-
成员变量: everyDay 首字母小写后面的单词首字母大写
-
局部变量:首字母小写 驼峰原则 同上和成员变量相似
-
常量:大写字母和下划线 MAX_NUMBER
-
类名:开头字母大写 Demo
-
方法名: 首字母小写 big() veryBig()
运算符
算数运算符 + - * / %(求余数)++(自增) --(自减)
常见问题
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b); //输出 30
System.out.println(a-b); //-10
System.out.println(a*b); //200
System.out.println(a/b); //0 问题出现 应该是 0.5
// 因为是int 类导致小数省略
System.out.println(a/(double)b);
// 通过强转可以排除这个错误
long a = 121231231L;
int b = 123;
short c =10;
byte d = 8;
// 里面有long 则为long 如果有double则为double
// 没有这则为 Int
System.out.println(a+b+c+d;) //Long
System.out.println(b+c+d); //Int
System.out.println(c+d); //Int
//++ --
int a = 3;
a++; // a = a+1 a =4
int b = 3;
b--; // b = b-1 b = 2
int a = 2;
int b = a++;
System.out.println(b); // a=3
System.out.println(b); //b 依然是2 之后再运行 ++
// a++ 和 ++a 是不同的 ++a先运算还是 a++ 先赋值
//特殊幂运算 有一些再Math类的工具来操作
Math.pow(2,3); //2 的三次方 2^3
关系运算符
总是会返回一个布尔类型的值
int a = 10;
int b = 20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b); //不等于
逻辑运算符{|| (or) &&(and) !(not}
boolean a = true;
boolean b = false;
System.out.println(a&&b); //二个为真则为真
System.out.println(a||b); //二个都为假则为假
System.out.println(!a&&b); //如果为真则变假 为假变真
//短路运算
b&&c // b为false 就直接停止运行了
位运算
A = 0011 1100
B = 0000 1101
A&B = 00001100 //二个1 才为1
A|B = 0011 1101 //有一个1 则为1
A^B= 0011 0001 //相同为0 不同为1
~B= 1111 0010 //取反
<< // 就是乘以2 效率极高
>> // 就是除以2 效率极高
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
省事运算符(doge)
int a = 10;
int b = 20;
a+=b // 就是 a=a+b;
a-=b // 就是 a=a-b;
System.out.println(a+b); // 为 int 30
System.out.println(""+a+b); //为字符串 "1020"
System.out.println(a+b+""); // 为 "30"
x ? y : z //x==true 为y 否则为z
a==10 ? "相等":"不相等"; //会输出相等