基本语法:
1.数据类型
1.1基本数据类型(8大类型):
byte 1字节 (0--255)
short 2字节 (-32768 -- 32767)
int 4字节 (-2^31 -- 2^31-1)
long 8字节 (-2^63 -- 2^63-1)
数字大小常量:
例如:
1.十进制数字表示:
-50 0 100
2.八进制数字表示:
-050 0 0100
3.十六进制数字表示:
-0xF0A9 0x0 0x1A0D
4.long类型的常量表示:
1000000L 10000001
float 4字节 -3.403E38-3.403E38
double 8字节
表示浮点数,是有误差的
浮点数表示方法:
1.十进制表示方法
31.4 100 .314
2.科学计数法:
3.14E+1^ 1.0e+2 3.14E-1
3.float与double不一样
double类型: 10.5
float类型: 10.5f 或 10.5F
unicode双字节标准:
char 2字节
文本型char
通常指用单引号包裹的单个字符,字符可以是字母,数字,汉字,符号
例如: 'a','5','中','@'
特殊:
1.十六进制表示a字母: 'u0061'
2.特殊符(转义字符)
换行
制表符
"
空字符
布尔型:boolean 1位 true|false
=============================================================================
1.2引用数据类型(3大类)
数组 int[] char[] String[] Date[]...所有后跟[]都是数组
类 String Math Date Calendar... 所有class定义的类
接口 所有的interface定义的接口
=============================================================================
2.变量
变量就是一个数据的存储空间,有三要素:数据类型,变量名,数值
在JAVA中如何声明一个变量:
语法:
数据类型 变量名;
数据类型 变量名=值;
注意:JAVA中方法体内的变量不赋初始值不能使用
例如:
int age; char sex='男'; char ch=' '; char ch2='u0061'; boolean bl = true; int num = 0xff; //数值255 int num2 = 255; int num3 = 0100;//数值64 float f = 5.236F; double d = 2.54; long l = 1000000L;
变量名是程序员自定义的一个标识符,标识符规定:
1.不能使用关键字
2.首字符必须是字母,下划线或$符
3.首字符之后可以跟字母、数字、下划线或$符
4.严格区分大小写
建议变量命名规范:
1.尽量使用有意义的英文单词,次选拼音,不要用汉字。
2.如果变量名是多个单词组合,建议从第二个单词开始首字母大写,
例如:userName
变量声明的位置:
1.可以在方法的定义内部任何地方
2.也可以在类定义的内部
例如:
public class 类名{ int X;//成员属性变量 public xxx 方法名(){ int y;//局部变量 } }
java中输入与输出
输出:
System.out.print()//不带换行,不支持占位符 System.out.println()//自动换行,不支持占位符 System.out.printf()//格式化输出,能使用占位符(%d,%f,...) //例如输出一个变量的值: int num=100; System.out.print("num变量的值是:"+num+" "); System.out.println("num变量的值是:"+num); System.out.printf("num变量的值是:%d ", num);
输入:
//1.定义一个输入对象,这个对象只要定义一次,可以反复调用。 java.util.Scanner input = new java.util.Scanner(System.in); //2.使用输入对象,调用方法接受键盘的输入 int num = in.nextInt(); String name = in.next(); String address = in.nextLine();//带空格 float num2 = in.nextFloat(); double bl = in.nextDouble(); //例如: public static void main(String[] args){ java.util.Scanner in = new java.util.Scanner(System.in); System.out.print("请输入一个整数:"); int num = in.nextInt(); System.out.print("请输入一个字符串:"); String s = in.next(); System.out.println("num="+num); System.out.println("s="+s); }
String op = kb.next();
char ch = op.charAt();// op.charAt(0):从op的的字符串值中取第一个字符,返回类型是char;
System.out 标准输出设置(显示器)
System.in 标准输入设置(键盘)
=============================================================================
3.运算符
Java的运算符,分为四类:
赋值运算符、算数运算符、关系运算符、逻辑运算符、位运算符。
1.赋值运算符:=,+=,-=,*=,/=,%=
变量=表达式
将表达式结果赋给左边的变量
例如:
+=
x += 5;等同于 x = x+5;
x *= 2+3;等同于 x = x*(2+3);
2.算数运算符:+,-,*,/,++,--,%,?:
例如:
+:
算术运算:左右两边是int,char,byte,double
连接运算:左右两边只要有一个是String
10/2 5
10/3 3
10/6 1
10/6.0 1.6666666667
%:求余数
例如:
10%5 0
10%3 1
3%5 3
3.0%1 出错,小数不能参与模运算
已经2016-3-8周三,再过15天,是周几?
有一个两位数整数,取出个位数是几?
xy%10
10%10 0
15%10 5
98%10 8
x是不是y的倍数
x%y==0
前置 后置
++x x++ x = x+1
--x x--
3.复合运算
y = x++; 前提x=5, 计算后y=5, x=6
y = ++x; 前提x=5, 计算后y=6, x=6
例如:
System.out.print(x++); System.out.print(x);//前提x=5,输出5,6 System.out.print(++x); System.out.print(x);//前提x=5,输出6,6 System.out.print(x+1);//前提x=5,输出6 System.out.print(x++);//前提x=5,输出5
?:条件运算符,三目运算符,多元运算符
条件?真值:假值
例如:
z = x>y?x:y;前提x=5,y=6,z的结果6
x>Y?假
取y
赋值
//程序中保存性别0,1分别表示男,女 String s = sex==1?"男":"女"; System.out.print(s);
4.关系运算符:==,>=,<=,!=,>,<
关系运算符的结果是布尔值。
==,!=是用于比较两个值是否相等或不等,
这两个操作可以任意类型,但不保证结果正确。
如果基本数据类型,结果正确。
如果是引用类型,比较两个对象的地址是不是同一个。
>,>=,<,<=只能比较基本数据类型的数据,不能用于比较引用型数据类型的数据。
逻辑运算符:&&,||,!,&,|
&&和||,对应and和or,连接多个关系运算,结果还是布尔值。
a>b && b>c:
a>b和b>c同时为true,结果为true,否则为false
a>b || b>c:
a>b和b>c同时为false,结果为false,否则为true。
!表示取反.
!(a>b):
如果a>b为true, 结果为false;
如果a>b为false, 结果为true。
//是不是闰年(year)? year%4==0&&year%100!=0 || year%400==0 //是不是平年(year)? !(year%4==0&&year%100!=0 || year%400==0) //或 (year%4!=0 || year%100==0) && year%400!=0
&&与&区别:
&&运算效率高,短路and,如果左边为false,右边不再计算。
&运算左右两边无论任何情况下都要计算。
前提:x=5,y=6
x++>5 && y++>6;
计算条件结果是false,x=6,y=6
前提:x=5,y=6
x++>5 & y++>6;
计算条件结果是false,x=6,y=7
位运算符:& | ~ ^ >> << >>>
只对数值计算
&:按位与
例如:5&10
5的二进制原码 0000 0101
10的二进制原码 0000 1010
然后每个位对应进行与运算,其结果是0
与:只要同为1,结果为1,否则为0
|:按位或
或:只要同为0,结果为0,否则为1
^:按位异或
异或:相同为0,不同位1
8^12 结果是4
0000 1000
^ 0000 1100
----------------
0000 0100
~:按位取反
取反:0变1,1变0
例如:~5 结果是250
0000 0101
----------------
1111 1010
其他运算符:
(),[ ],new,instanceof(instanceof用来判断内存中实际对象A是不是B类型)
优先级
1级 (),[]
2级 !,++,--,-(负号)
3级 *,/,%
4级 +,-
5级 按位逻辑运算<<,>>
6级 >,>=,<,<=
7级 ==,!=
8,9,10级 按位逻辑运算&,^,|
11级 &&
12级 ||
13级 ?:
14级 =
=============================================================================
4.表达式
什么是表达式?
运算符和操作数的有效组合;
常用操作数:常量,变量,带返回值的函数,子表达式
1+2:常量:1,2
a=b+3:常量3,变量:a和b
a=max(b,3)常量3,变量:a和b,函数max()
a=b+3:b+3子表达式
有效:
5/0无效组合
什么是jAVA表达式?
运算符只能java中的运算符合操作数的有效组合;
表达式出现位置:
表达式;//java中语句
控制语句中可以出现
for(表达式1;表达式2;表达式3)
if(条件表达式)
...
例如:
int a,b; a+b;//一个整数表达式,结果是int int a,b; a>b;//一个布尔表达式,表示条件,结果是boolean值 int a; a=3;//一个赋值表达式,结果是将3赋给a变量
特殊情况:
所有byte,int,short,char类型的数据进行算术运算,结果是int类型。
强制转换数据类型:
int N=100; byte b=(byte)n; char c=(char)n; //注意:不是所有类型之间都可以强制转换,所有类型必须兼容。 int n=(int)"abc";//错误:字符串与int类型不兼容 int n=(int)'a';//编译出错
=============================================================================
5.流程控制语句
a.条件分支
if , if else, else if ,switch(多路分支)
语法:
switch(表达式){
case 常量1 :代码1;break;
case 常量2 :代码2;break;
case 常量3 :代码3;break;
....
default:
}
注意:
1.表达式:结果必须是整数,char或String
2.break可选,中断switch
3.default可选
4.case和default顺序可以换
b.循环迭代
for循环语句
c.跳转
break:
在循环语句,用于结束循环
包含在switch或循环语句内部
continue
结束本次迭代,回到循环条件
只能包含在循环语句内部
注意:
1.break,coutinue一般在循环中的条件语句中
2.break,countine在同一层中后不能有其他语句
如何结束程序?
System.exit(n);
=============================================================================
6、数组
6.1数组的含义:
一组相同的数据类型的固定长度的序列的数据集合,变量存放一个数据,数组可以存放多个数据。
6.2定义或声明数组语法:
声明数组:
定义了一个数组名,没有开辟空间,长度没有固定,元素也不确定,不能使用元素。
数据类型 数组名[];
数据类型[] 数组名;
//例如: int arr[]; int[] arr;
默认初始化数组:
数组名 = new 数据类型[长度];
显示初始化数组:
数据类型[] 数组名 = new 数据类型[]{数据1,数据2,....};
数据类型[] 数组名 = {数据1,数据2,....};
定义数组:既声明了数组名,也开辟了空间,只有开辟空间,就有默认值。
1.数据类型[] 数组名 = new 数据类型[长度];
2.数据类型[] 数组名 = new 数据类型[]{数据1,数据2,....};
3.数据类型[] 数组名 = {数据1,数据2,....};
//例如: int[] arr1 = new int[5]; String[] arr1 = new String[5]; int[] arr2 = new int[]{1,2,3,4}; int[] arr3 = {1,2,3,4};
数据的类型:
所有原始数据类型的数组,默认初始化值是0;boolean是false,char也是编码0。
引用数据类型的数组,默认初始化值是null,null表示空对象或空引用。
访问数组元素:
访问数组元素:读和写
获取一个元素的值(读):变量 = 数据名[下标];
设置一个元素的值(写):数组名[下标] = 新值;
下标:是从0开始的整数,最大下标为数组元素个数-1。
foreach遍历数组:
for(int t(声明的变量名) : 数组名){
System.out.println(t);
}
//二维数组 int[][] arr2 = new int[2][5]; //arr[0] = new int[5]; //arr[1] = new int[6]; //arr2是一个二维数组,原理: //0 0 0 0 0 //0 0 0 10 0 0 //arr2[1][3] = 10;
数组的声明定义方式:
类型[] 数组名=new 类型[长度];//声明并定义
int[] arr1 = new int[100]; Object[] arr2 = new Object[100];
类型[] 数组名=new 类型[]{数据1,数据2,数据3,...};//声明,定义并初始
float[] arr1 = new float[]{10,10.5f}; Date birthday = new Date(); Date[] arr2 = new Date[]{new Date(), new Date(100000L), null,birthday, d, new SimpleDateFormat("yyyy-MM-dd").format("2015-8-9")}; boolean[] arr1 = {true,false,true,true, false}; String[] arr2 = {"abc","324","ABC"};
使用字符串转日期
String str = "2017-3-17"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.format(str);
=============================================================================
7.原码,反码,补码,浮点小数,定点小数,机器数
1.机器数:
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
2.原码:
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
3.反码:
正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.
4.补码:
正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1).
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
5.浮点数和定点数:
小数点的位置不固定,可以浮动,称为浮点数。
规定小数点位置固定不变,称为定点数。
在计算机中,通常是用定点数来表示整数和纯小数,分别称为定点整数和定点小数。对于既有整数部分、又有小数部分的数,一般用浮点数表示。