Java全部的组成部分都须要名字。类名、变量名以及方法名都被称为标识符。javascript
不能使用关键字做为变量名或方法名java
标识符是大小写敏感的数组
合法标识符举例:fuck、$abcd、_abcd、__1_abcdide
非法标识符举例:123abc、-abc、#abc.net
强类型语言3d
弱类型语言code
Java的数据类型分为两大类对象
基本数据类型只有8种,可按照以下分类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean
blog
No. | 数据类型 | 大小/位 | 可表示数据范围 | 默认值 |
---|---|---|---|---|
1 | byte (字节型) |
8 | -128~127 | 0 |
2 | short (短整型) |
16 | -32768~32767 | 0 |
3 | int (整型) |
32 | -2147483648~2147483647 | 0 |
4 | long (长整型) |
64 | -9223372036854775808~9223372036854775807 | 0 |
5 | float (单精度) |
32 | -3.4E38~3.4E38 | 0.0 |
6 | double (双精度) |
64 | -1.7E308~1.7E308 | 0.0 |
7 | char (字符) |
16 | 0~255 | '\u0000' |
8 | boolean (布尔) |
- | true或false | false |
引用数据类型很是多,大体包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型接口
什么是字节
因为Java是强类型语言,因此要进行某些运算的时候,须要用到类型转换
1.低转高的数据类型,能够自动转换
例:
public static void main(String[] args) { short i = 128; int j = i; System.out.println(j);//输出128 }
2.若是由高的数据类型转换到低的数据类型的话,则须要强制转换
例:
public static void main(String[] args) { long a = 12800; int b = (int)a; System.out.println(b);//输出12800 }
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.把高容量转换到低容量的数据类型时,须要强制转换
4.转换的时候可能存在内存溢出,或者精度缺失的问题
例:
public static void main(String[] args) { //操做比较大的数时,要注意溢出问题 //JDK7新特性,数字能够用下划线进行分割 int money = 10_0000_0000; int year = 20; int total = money*year; System.out.println(total);//输出-1474836480,是因为计算的时候溢出了 long total2 = money*year; System.out.println(total2);//也是输出-1474836480,由于转换以前就已经溢出 long tatal3 = money*((long)year);//正确写法应该是先把一个数转换为long,再进行计算 System.out.println(tatal3);//输出20000000000 }
Java变量是程序中最基本的存储单元,其要素包括变量类型,变量名,做用域
type varName = value //数据类型 变量名 = 值; 也能够用逗号隔开来声明多个变量
注意事项:
public static void main(String[] args) { int a=1,b=2,c=3;//为了程序可读性,不建议一行建立多个变量 String name = "张三"; int age = 47; char sex = '男'; }
变量是有做用范围(Scope)的,也即做用域。一旦超出变量的做用域,就没法再使用这个变量。在程序中,变量必定会被定义在某一对大括号中,该大括号所包含的代码区即是这个变量的做用域。
1.局部变量
在一个方法或方法内代码块中定义的变量称为局部变量,局部变量在方法或代码块被执行时建立,在方法或代码块结束时被销毁。局部变量在进行取值前必须被初始化,不然会编译错误。
2.实例变量
public class Test { //实例变量:从属于对象,能够不初始化值,若是不自行初始化值,则会是默认值 String name; int age; boolean flag; double a; float b; public static void main(String[] args) { Test test = new Test(); System.out.println(test.name);//输出null System.out.println(test.age);//输出0 System.out.println(test.flag);//输出false System.out.println(test.a);//输出0.0 System.out.println(test.b);//输出0.0 //布尔值的默认值是false,基本类型的默认值是0或0.0,其他的默认值都是null } }
3.类变量
类变量是随着类的加载而加载的,和实例变量的区别是类变量不须要实例化
public class Test { static int age = 18;//类变量 public static void main(String[] args) { System.out.println(age);//输出18,不须要实例化能够直接输出 } }
final 常量名 = 值; final double PI = 3.14;
public class Test { static final double PI = 3.14; public static void main(String[] args) { System.out.println(PI);//正常可输出3.14 final int A = 15000; A = 16000;//会报错,由于A已经被final定义为常量,因此不容许改变 } }
//类名 public class GoodMan { //常量名 static final double MAX_VALUE = 30000; //类成员变量 int myAge = 17; public static void main(String[] args) { //局部变量 String myName = "张三"; } //方法名 public void runRun(){} }
Java语言支持以下运算符:
例1:使用算术运算符时要考虑数据类型的转换,以避免出现精度缺失
public static void main(String[] args) { int a = 10; int b = 20; 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);//输出0.5,a除以b能够进行强转来得出正确得数 }
例2:数据类型的隐式转换
public static void main(String[] args) { long a = 123456789123L; int b = 123; short c = 10; byte d = 8; System.out.println(a+b+c+d);//输出是long类型 System.out.println(b+c+d);//输出是int类型 System.out.println(c+d);//输出是int类型 //在整数类型中,若是相加数有long类型,则会转换为long //在整数类型中,没有long类型,则全部非int型会转换为int类型 }
例:++a和a++的区别(自减同理)
public static void main(String[] args) { int a = 3; System.out.println(a);//输出3,此时a并未自增 int b = a++;//a++是把a=3赋值给了b再进行自增 int c = ++a;//++a是自增以后再赋值给了c,因为前面int b = a++的时候,a赋值以后已经自增了,因此等于5 System.out.println(a);//输出5 System.out.println(b);//输出3 System.out.println(c);//输出5 }
例:逻辑运算符的与或非
public static void main(String[] args) { //逻辑运算符: 与&& 或|| 非! boolean a = true; boolean b = false; System.out.println("a && b:"+(a&&b));//输出为false,两个变量为真,结果才为true System.out.println("a || b:"+(a||b));//输出为true,只要一个变量为真,结果为true System.out.println("a && b:"+!(a&&b));//输出true,若是a&&b的结果为真,加上非则为假,反之亦然 }
例:短路运算,&&具备短路功能,即第一个表达式为false则不会再计算第二表达式
public static void main(String[] args) { //短路运算:&&具备短路功能,即若是第一个表达式为false则不会再计算第二表达式 int a = 5; boolean b = (a < 4)&&(++a < 4); System.out.println(b);//输出false System.out.println(a);//输出5,因而可知第二表达式的++a并无自增 //可是单个&也能够看成逻辑运算符,但它则不会形成短路运算 int c = 5; boolean d = (c < 4)&(++c < 4); System.out.println(c);//输出6 }
与&,或|,非~,异或^
位运算符主要针对二进制,逢二进一 A = 0011 1100 B = 0000 1101 ------------------------------------- A&B则是A与B的每位进行比较,能够把0看成false,1看成true进行比较,两个数的位都为1则为1 其中有一个0则为0 A&B = 0000 1100 ------------------------------------- A|B则是若是两位比较都是0则为0,不然为1 A|B = 0011 1101 ------------------------------------- A^B = 0011 0001 异或是比较两个操做数的位中,相同的数则结果为0,不一样则结果为1 ------------------------------------- ~B = 1111 0010 取反则是每位中0则为1,1则为0
<<左移 >>右移
public static void main(String[] args) { /* 二进制换算 0 = 0000 0000 1 = 0000 0001 2 = 0000 0010 3 = 0000 0011 4 = 0000 0100 8 = 0000 1000 16 = 0001 0000 */ //左移<<至关于*2,右移>>至关于/2 System.out.println(2<<3);//输出16,在二进制中则是把1左移3位 }
例:a+=b便是a=a+b,a-=b则是a=a-b,以此类推
public static void main(String[] args) { int a = 10; int b = 20; a+=b;//a+=b至关于a=a+b,-=,*=,/=亦是如此 System.out.println(a);//输出30 }
例: x ? y : n 的意思是若是x的结果为true,则结果为左边y,不然结果为右边n
public static void main(String[] args) { int score = 80; //若是score大于60的结果是true则返回冒号左边的值,不然返回右边,赋值给type String type = score > 60 ? "合格" : "不合格"; System.out.println(type);//输出合格 }