常见的进制 十进制 1010 二进制 满二进一 0B10101010 (JDK1.6是可以这样的) 八进制 满8进一,数字在0_7之间 077 078(error) 十六进制 满16进一,数字在0-9 A B C D E F 0x开头,x不区分大小写,0x0010 0XAABB 计算机中,所有的内容在内存中都是二进制表示的 'A'-->它的ASII 65 1000001 进制的转换 ==十进制转成二进制 6-->110 21-->10101 ==二进制转十进制 10101-->1*2^0+0*2^1+1*2^2+0*2^3+1*2^4=21 ==二进制转八进制 10101010001010111---->010 101 010 001 010 111==0252127 ==二进制转十六进制 10101010001010111 --->0001 0101 0100 0101 0111==0x15457 计算机中,一个二进制位是一个比特位(bit), 8个比特位是一个字节 1024个字节,就是1k 1024k是1M 1024M是1G 1024G是1T 1024T是1p 你好 4个字节 101010101010101001 4/1024==2/512 1/256 负数在内存中表现的形式:是正数的按位取反+1 3 -3 byte a=3; //1个字节 0000 0011 1111 1100 + 1 ================== 1111 1101 -3 可以看出,正数的符号是0,负数的符号是1 1 把 34 ,32,9,13,26 转成2进制, 8进制,16进制 32 16 8 4 2 1 0b100010 042 0x22 2 把 010010 , 10100101 转成 10进制,8进制,16进制 010010 18 022 0x12 3 把0x1F, 0712, 076 转成 10进制,二进制 0001 1111 31 4 写出 short a=-8 在内存中的表现形式 (提示:short是2个字节的长度) 8 00000000 00001000 11111111 11110111 + 1 ====================== 11111111 11111000 -8
2 标识符
规定函数的名称,变量的名称,类的名称,包的名称等符号规则 由字母(a-zA-Z),数字,下划线_ 或$ 组成,数字不可以放在第一位 不能与关键字相同,(public class static void....)' 严格区分大小写,汉字也可以 name, 9username, Name,user_name ,$name , _name, user name , publicName, public ,name999,#name, L9, 中国
3 变量
java中变量的类型 有两大类 (基本数据类型 引用数据类型) 基本数据类型 8 种 整型 byte 1个字节 有符号整数-128到127 byte a=127; //ok byte a=-129; //error short 2个字节 有符号整数 32767到-32768 short a=125; //ok short a=32769; //error int 4个字节 有符号整数 2147483647 到 -2147483648 之间 long 8个字节 有符号整数 9223372036854775807 到 -9223372036854775808 之间 long a=9; //ok java中整数的默认类型int类型,给long是没有任何问题 long a=9.0; //error,9.0是浮点型 long a=9L; //ok long型,可以在后面加一个L,大小写不区分 浮点型 float 4个字节 有符号浮点数 (又称为单精度) 8位有效数字,会发现最后一位会进行4舍5入原则 float a=3.14; //error 3.14默认是double类型, float a=3.14f; //ok; float a=40; //ok double 8个字节 有符号浮点数(又称为双精度) 16为有效数字 double a=1.5; //ok double a=1.5d; //ok double a=1; //ok 字符型 char 2个字节 ,可以装下一个汉子吗? 一个汉子是一个字符 char的数字范围是多少之间?0-65535 char a='A'; char x='中'; char x='中国'; //error char x='ab'; //error char x="中"; //error char x=90; //ok 能书写数字 char x=65536; //error char x=''; //不可以 char x=' '; //ok char x='u0000'; //ok 代表一个空值 //例一 char可以直接当数字进行计算 char a='A'; int b=5; System.out.println(a+b); //70 //例二 两个char相加 char a='A'; char b='B'; System.out.println(a+b); //131 布尔型 boolean 一个字节 只有两个取值范围 true 和 false 说明: 整数的默认类型是int 90 -->int 90 小数的默认类型是double 3.14 --> double 3.14 例子 float a=3.14; //error float a=3.14f; 或 double a=3.14; long num=99999999999999;// error 原因:因为整数默认类型是int类型,但是99999999999999;超过了int,所以编译器在编译期报错 long num=99999999999999L; //ok byte a=127; //原因,因为byte127到-128,然后编译器在编译期的时候,是认识常量的,又因为byte能装下,所以没问题 引用数据类型 类 对象 接口 数组.....
4 运算符 (算数运算符 赋值运算符 逻辑运算符 关系运算符 位运算符 条件运算符)
===算数运算符 + - * / % ++ -- 15000/10000*10000 -->10000 1) / 使用 两个整数相除,结果保留整数位 double a=15000/10000--> 1.0 //15000和10000默认是整数int,相除得1,但是赋值给double,变成1.0 double a=15000f/10000f; -->1.5 2) % 5%3=2 3%5=3 3) ++ -- 在原来的基础上加一或者减一 int a=10; a++; //a=a+1; 在a的基础上进行加一 System.out.println(a); //11 也可以这样写 ++a,也是让a自加 ++ 在前面和在后面有什么区别? //++在后面的例子 int a=10; int b=a++; //++在后面,要先赋值,此时b为10,在a++;此时a为11 System.out.println(a); //11 System.out.println(b); //10 //++在前面的例子 int a=10; int b=++a; //++在前面,要先自加,此时a为11,在赋值;此时b为11 System.out.println(a); //11 System.out.println(b); //11 --和++一个意思,只是做了减去一 4) 字符串相加 String str="1+2"+"3+4"; //此时的+是字符串连接符,并不是算数中的+ 如果两个不同类型的数进行计算,会把两个类型变成相同类型的,把小的变成大的 String str="1+2="+1+2; System.out.println(str); //1+2=12 原因:"1+2"是字符串,而1是整数,类型不同,需要把小的int变成大的String,所以它们中间的+,就是字符串连接符,所以即是这个结果 String str2=1+2+"1+2="; System.out.println(str2); //31+2= String str="1+2="+(1+2); System.out.println(str); //1+2=3 几个常用的转义字符 转义字符 """-->" n 换行 r 回车 //在window中,就是把光标移动到下一行 t 制表符,相当于tab //通常在window系统中 换行符 rn linux是n =====赋值运算符 //例一 byte a=10; int b=a; //ok 小类型往大类型放,没问题 //例二 byte a=10+5; //ok //例三 byte a=10; a=a+5; //error ,第一点:a是变量,编译器不认识变量,认为a+5很可以超过byte,所以java不让 第二点:a是byte,5是int,所以a+5最后是int类型,赋值给byte,不行 //例四 short a=10; a=a+5; //不行,和上面原因一样 //例五 int a=10; a=a+5; //行 实验发现:上例子对byte和short都会报错,只有int没有,因为byte和short类型结果容易越界,所以 java中规定对含有它们的变量进行计算的时候,不能再用byte和short去接受 //例六 类型转换 byte a=90; int b=a; //ok int a=10; byte b=a; //不行,如果非得行,就要强制类型转换 int a=10; byte b=(byte)a; //强制类型转换,当byte型可以装下的时候 强调:强转的时候,要注意,不要超过低类型的范围 如果超过低类型范围 int a=128; byte b=(byte)a; System.out.println(b); //-128 问:有没有那么一种可能,原数值+1<原数值,存在,原数值是此类型最大值 //例七 关于+=的操作 byte a=90; a+=10; //a=a+10 -= *= /= %= a+=10操作是比a=a+10快,并且有强制转换的含义a=(byte)(a+10) System.out.println(a); ======关系运算符 < > <= >= != == instanceof 关系运算符的结果都是boolean类型的 ======逻辑运算符 & 与 两边都成立的时候,才为真,有一个为假,结果就为假 a>b & b>c | 或 两边只要有一个成立的,结果就为真 1>2 | 2>1 ^ 异或 两边相同,结果为假,两边不同,结果位真 true^false true true^true false false^false false ! 非 && 短路与 || 短路或 &和&&有什么区别? !!!! 前者左边不成立,右边还是会继续判断, 后者左边不成立,右边就不会再进行判断了 1>2 || 2>1 && 3>2 true &&优先级|| ======位运算符 & 按位与 00000001 00000010 ======== 00000000 | 按位或 00000001 00000010 ======== 00000011 ~ 按位取反运算符 ~5=-6 00000101 11111010 -6 负数=正数取反+1 正数取反=负数-1 正数取反=11111001 正数=取反(正数取反) 正数=00000110 6 ^ 异或 相同为0,不同为1 00000001 00000010 ======== 00000011 附:一个数值和另一个数值,进行两次异或操作,将得到原来的值 int a=90; a^=58; //a=a^58; System.out.println(a); System.out.println(a^58); << //算数左移,逻辑左移 算数左移和逻辑左移一样都是右边补0 例子 数字6 0000 0110 6 左移一次 0000 1100 12 发现:左移一次相当于成2 (面试题: 如何快速算出2*8,让 2<<3) ps:这种成倍关系只有当左移被舍弃的高位不含有1的时候 >> //算数右移,逻辑右移 逻辑右移:只要将二进制整体右移,左边补0即可 例如:00001100 逻辑右移 00000110 相当除2 ps:30>>12=0 算数右移:符号位要一起移动,并且在左边补上符号位,如果符号位是1,就补1,是0就补0 如果:11100算数右移一次,11110,(符号位进行补全) =====条件运算符 (三元表达式也叫做三目运算符) 格式: 条件表达式?表达式一:表达式二; 执行流程:先判断条件表达式是true还是false,如果为true,那么结果为表达式一,否则为表达式二 //例子 获取两个数据最大值 int a=10; int b=12; int max=a>b?a:b; //例子 如果工作天数>30天,给5000元,否则是1000 int day=29; int 钱数=day>30?5000:1000; //int 钱数=5000; //例子 如果工作天数>30天,"继续努力",否则是"开除了" int day=29; String str=day>30?"继续努力":"开除了"; //例子 int day=29; String str=day>30?System.out.println("继续努力"):System.out.println("开除了"); //编译报错
5 流程控制语句的几种结构
1) 顺序结构 略 2) 选择结构 3) 循环结构 ==选择结构 if if...else 多重if 嵌套if //例子 if int age=12; if(age>20){ System.out.println("年龄大于20"); } System.out.println(" 大专栏 java运算符、流程控制语句年龄小于20"); 或者 int age=19; if(age>20) System.out.println("年龄大于20"); //离if最近的语句是if中的语句,不建议 System.out.println("年龄小于20"); //例子 if...else int age=19; if(age>20){ System.out.println("年龄大于20"); } System.out.println("我什么时候执行?"); //if和else中间不能有任何语句 else{ System.out.println("年龄小于20"); } //多重if public static void main(String[] args){ int month=10; if(month==1){ System.out.println("一月"); }else if(month==2){ System.out.println("二月"); }else{ System.out.println("其他月份"); } if(month==3){ System.out.println("三月"); } } //嵌套if public static void main(String[] args){ String today="周末"; String weather="晴朗"; if(today.equals("周末")){ //String类型进行比较用equals("") if(weather.equals("晴朗")){ System.out.println("去户外活动"); }else{ System.out.println("去室内活动"); } }else{ System.out.println("上班"); } } ======switch 选择语句 格式 switch(表达式){ //byte short int char Enum(枚举类型) String(jdk1.7之后实现的) case 值1: 执行语句; break; case 值2: 执行语句; break; case 值3: 执行语句; break; default: 执行语句; break; //最后一个break可以省略 } //例子 int a=2; switch(a){ case 1: System.out.println("a"); break; case 2: System.out.println("b"); //break; 如果这里不加break,则下面的语句还会还行,直到遇到break,才结束switch case 3: System.out.println("c"); break; default: System.out.println("其他"); //break; } //例子 public static void main(String[] args){ int a=2; int b=3; char ch='+'; switch(ch){ case '+': System.out.println(a+"+"+b+"="+(a+b)); break; case '-': System.out.println("a-b="+(a-b)); break; case '*': System.out.println("a*b="+(a*b)); break; case '/': System.out.println("a/b="+(a/b)); break; default: System.out.println("其他"); //break; } //例子 //需求 根据用户指定的月份,打印出所属的季节 int a=2; switch(a){ case 1: case 2: case 12: System.out.println("冬季"); break; case 3: case 4: case 5: System.out.println("春季"); break; case 6: case 7: case 8: System.out.println("夏季"); break; case 9: case 10: case 11: System.out.println("秋季"); break; default: System.out.println("输入有误"); } //switch语句速度比if快 // if(a==2){ }else if(a==1){ }else if(a==3){ } switch(a){ case 1: .... case 2: .... } //例子 从键盘输入一个月份,判断他是第几季度 import java.util.Scanner; class Hello{ public static void main(String[] args){ Scanner scan=new Scanner(System.in); int month=scan.nextInt(); if(month>=1 && month<=3){ System.out.println("第一季度"); }else if(month>=4 && month<=6){ System.out.println("第二季度"); }else if(month>=7 && month<=9){ System.out.println("第三季度"); }else if(month>=10 && month<=12){ System.out.println("第四季度"); }else{ System.out.println("月份有误"); } scan.close(); System.out.println("程序结束"); } } ====循环结构 下周见 //练习 1.把今天的例子都写一遍,然后保存起来 2.输入一个成绩 0-20 分之间:这孩子完蛋了 21-40 之间:这孩子太操心了 41-60 之间:赶紧救救吧 61-80 之间:祖国的希望 81-100 之间:开什么玩笑,一定是抄的 public static void main(String[] args) { /* * 输入一个成绩 0-20 分之间:这孩子完蛋了 21-40 之间:这孩子太操心了 41-60 之间:赶紧救救吧 61-80 之间:祖国的希望 * 81-100 之间:开什么玩笑,一定是抄的 */ Scanner scan = new Scanner(System.in); System.out.println("请输入一个分数"); int score = scan.nextInt(); if (score >= 0 && score <= 20) { System.out.println("这孩子完蛋了"); } else if (score >= 21 && score <= 40) { System.out.println("这孩子太操心了"); }else if(score >= 41 && score <= 60){ System.out.println("赶紧救救吧"); }else if(score >= 61 && score <= 80){ System.out.println("祖国的希望"); }else if(score >= 81 && score <= 100){ System.out.println("开什么玩笑,一定是抄的"); }else{ System.out.println("数字有误!"); } scan.close(); } 3.输入两个整数,一个符号 然后进行加减乘除操作 public static void main(String[] args) { /* * 3.输入两个整数,一个符号 然后进行加减乘除操作 */ Scanner scan = new Scanner(System.in); System.out.println("请输入第一个整数"); int num1 = scan.nextInt(); System.out.println("请输入第二个整数"); int num2 = scan.nextInt(); System.out.println("请输入一个符号"); String str = scan.next(); // "+" char ch=str.charAt(0); //'+' switch (ch) { // char '+' '-' case '+': System.out.println(num1+"+"+num2+"="+(num1+num2)); break; case '-': System.out.println(num1+"-"+num2+"="+(num1-num2)); break; case '*': System.out.println(num1+"*"+num2+"="+(num1*num2)); break; case '/': System.out.println(num1+"/"+num2+"="+(num1/num2)); break; default: System.out.println("您输入的符号有误"); break; } scan.close(); } 4.输入一个年份和一个月份,得到当前月份一共多少天 Scanner scan = new Scanner(System.in); System.out.println("请输入月份"); int month = scan.nextInt(); System.out.println("请输入年份"); int year = scan.nextInt(); switch (month) { // char '+' '-' case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println(year+"年的"+month+"月有31天"); break; case 4: case 6: case 9: case 11: System.out.println(year+"年的"+month+"月有30天"); break; case 2: //能被4整除并且不能被100整除 或者 能被400整除的数 if((year%4==0 && year%100!=0) || year%400==0){ System.out.println(year+"年的"+month+"月有29天"); }else{ System.out.println(year+"年的"+month+"月有28天"); } break; default: System.out.println("输入的月份有误"); break; } scan.close();
12345678910111213141516171819202122 | 1. 定义一个类名字叫person,类中有主方法,方法中有几个类型变量 第一个是byte类型变量,变量名(9age,age)任选一个作为名称,表示年龄,给9岁 第二个是short类型,变量名(fa age,$fage)任选一个作为变量名称,给30; 第三个是int类型,变量名a 给50; 第四个是long类型,名称b 给100; 第五个是float类型,名称给f,给4.0 第六个是double类型,名称d 给6.87 第七个是char类型,名称c 给40; 第八个是char类型,名称c1 给'中' 第九个是char类型,名称c2 给'国' 分别输出第一个加第二个值 int af=age+$fage; 输出第六个加第五个值 输出第四个加第三个加第七个值 输出第八个加上第九个 看到结果 age+fa_age=??? System.out.println("age+fa_age="+af); byte age=9; short $fage=30; |
附:
next()和nextLine()区别?
nextLine()遇到回车,即为结束,
next()遇到无效字符,即为结束