java第二节 基本数据类型
class Lesson2 { public static void main(String[] args) { //----------------------------------- //@Date: 2013-06-30 //System.out.println("hello world"); //System.out.println("你好java"); //java中的常量 //整型常量 //常量的数据类型 //常量的概念与作用 //int x=0, y; //int x, y; //必须先初始化变量才能对变量进行操作 //y = x+3; //System.out.println("合值为:"+y); /* 数据类型 ---基本数据类型 ----数值型 -----整型类型(byte,short,int,long) -----浮点类型(float,double) -----字符型(char) -----布尔型(boolean) ----引用数据类型 -----类(class) -----接口(interface) -----数组 */ //char ch = 'x'; //字符 //System.out.println(ch); //类型转化 //自动类型转换 // //byte b = 129; //byte类型的最大值是127 //float f=3.5;报错 //原因为我们直接在程序中使用了3.5,因为3.5是一个double类型的浮点数 //double在内存中是站8个字节,但float 只站四个字节 //float f = 3.5f; //System.out.println(f); //byte b = 122; //int x = b; //System.out.println(x); //自动类型转换(也叫陷式类型转换) //byte b = 122; //int x = 266; //b = x; 失败 //b = (byte)x; //强制类型转换(也叫显示类型转换) //System.out.println("x:"+b); //数据位数的丢失 打印为10 //类型转换的原理,及什么时候要用强制类型转换 //被赋值的类型的字节大于当前赋值的字节的变量,可以用隐示转换 //被赋值的类型的字节小于当前赋值的字节的变量,可用显示转换 //表达式的数据类型自动提升 //所有的byte型,short型和char的值将被提升为int类型 //如果一个操作类型是long型,计算结果就是Long型 //如果一个操作类型是float型,计算结果就是float型 //如果一个操作类型是double型,计算结果就是double型 //System.out.println('a'+1); //这个是一个字符加1 //这里直接把字符转换为十进制的整数,然后加1 //System.out.println(""+'a'+1); //这里是一个空字符串加一个字符a然后加1 //这里是将a与空字符串进行相加,然后得出字符串,字符串加1,进行字符相加操作 //区别暂时不知道 //byte b = 3; //b = b - 1; //这里的1为int类型,所以byte减去int类型提示错误 //上面这种自我想法是错误 //b转换为一个int类型,然后去减1, 为一个int类型的2. //所以不能将一个int类型的值赋值给byte值 //int bb = b -1; //System.out.println(bb); //System.out.println('a'+1); //a会被提升为整数类型,然后进行相加 //System.out.println(""+'a'+1);//表达式中如果有字符串与其它数值相加, //其实就是与其它变量进行相连 //复合语句,也就是变量的生存周期 /*{ int x = 3; System.out.println(x); } System.out.println(x);*/ //这是在C语言中可以这样使用 //但在java中不允许这样使用 /*int x = 9; { int x = 3; System.out.println(x); } System.out.println(x);*/ //变量的生存周期与作用域 //变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用 //前面定义的变量,我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用 /*int x = 9; { System.out.println(x); }*/ //函数 //函数(子程序)的概念与作用 //定义一个函数的格式 //编写打印三个矩形的程序 //如果理解函数返回类型为void的情况 //void表示无返回值 /*for(int i=0; i<10; i++) { System.out.println(i+"\r\n"); }*/ /*for(int i=0; i<3; i++) { for(int j=0; j<5; j++) { System.out.print('*'); } System.out.println(); } for(int i=0; i<2; i++) { for(int j=0; j<3; j++) { System.out.print('*'); } System.out.println(); } for(int i=0; i<6; i++) { for(int j=0; j<10; j++) { System.out.print('*'); } System.out.println(); }*/ //MyPrint(3,5); //MyPrint(4,3); //MyPrint(10,10); //System.out.println("3*5="+getArea(3,5)); //调数的调用 //函数调用的格式 //在函数中使用return提前返回 //函数调用的过程分析 //函数重载 //函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可 /*int isum =0; double fsum; isum = add(5,5); System.out.println("isum:"+isum); isum = add(5,5,5); System.out.println("isum:"+isum); fsum = add(3.2, 5.2); System.out.println("fsum:"+fsum);*/ /*System.out.println(Float.intBitsToFloat(0x7f800000));//正则无穷大 System.out.println(Float.intBitsToFloat(0x7f800001));//比正则无穷大还要大的值,就不是数字了 //浮点数表示的最大值 System.out.println(Float.intBitsToFloat(0x7f7fffff)); //浮点数表示的最小值 System.out.println(Float.intBitsToFloat(0x00000001));*/ //数组 //1 为什么时会有数组? //2 堆内存和栈内存 //3 int[] x; x= new int[100]的内存状态变化情况 } public static int add(int x, int y) { return x+y; } public static int add(int x, int y, int z) { return x+y+z; } public static double add(double x, double y) { return x + y; } public static int getArea(int x, int y) { return x * y; } public static void MyPrint(int h, int w) { for(int i=0; i<h; i++) { for(int j=0; j<w; j++) { System.out.print('*'); } System.out.println(); //return; } } }
class Lesson21 { public static void main(String[] args) { //int x = 5, y; //y = x/ 2; //System.out.println(y); //float f = z / 2; //System.out.println(f); //2.0 //float f = (float)x / 2; //System.out.println(f); //2.5 //int x = 5, y; //y = -x % 2; //System.out.println(y); //-1 //y = x % 2; //System.out.println(y);//取幕运算时,当取幕为负数时,负号可以不计 //int x = 10; //int y = (x+5)/6; //这里加五也是正确的,因为只要有一个就是一页, //int y = (x+5)/6;//还真得用这个办法,不然想不到办法 //System.out.println(y); /*int x = 30; int y = (x%6) >=1 ? 1 : 0; int n = (x/6) + y; System.out.println(n);*/ /*for(int x=0; x<=9; x++) { System.out.println(x); }*/ //int i = 3 % 1;//0 //int j = 9 % 4;//1 //System.out.println("i:"+i); //System.out.println("j:"+j); /*int x = 0; while(true) { x = (x+1) % 10; System.out.println("x:"+x); }*/ //赋值运算符 // = // += // -= // *= // /= // %= //int x = 6; //x += 5; //System.out.println("x:"+x); //比较运算符 /* 运算符 == != < <= > >= instanceof 检查是否是类的对象 逻辑运算符 & AND (与) ! OR (或) ^ XOR (异或) 如果两个表达式的如果都为false 或者都为true,那么结果为false ,如果一个为false一个为true,那么为true ! NOT (非) && AND (短路) || OR (短路) //注1: 逻辑运算符用于对boolean 型结果的表达式进行运算,运算的结果都是boolean型 //注2: "&"与"&&"的区别在于,如果使用前者连接,那么无论任何情况,"&"两边的表达式都会参与计算 //如果使用后者连接,当"&&"的左边为false,则将不会计算其右边的表达式,"|"与"||"的区别与"&"和"&&"的区别一样 */ /*int x=1, y=10; if(x <=1 & y>=10) { System.out.println("x <=1 & y>=10"); } if(x <=1 && y>=10) { System.out.println("x <=1 && y>=10"); } if( x<=1 ^ y>=15) { System.out.println("x<=1 ^ y>=15"); }*/ /* 位运算符 任何信息在计算机中都是以二进制的形式保存的,& | 除了可以作为逻辑运算符,也可以做为位算符 它们对两个操作数中的每一个二进制位都进行位运算 1 只有参加运算的两位都为1,&运算的结果才为1,否则就为0 2 只有参加运算的两位都为0,|运算的结果才为0,否则就为1 3 只有参加运算的两位不同,^运算的结果为1,否则就为0 我们可以对数据按二进制位进行移动操作,java的移位运算符有三种 1 << 左移 2 >> 右移 3 >>> 无符号右移 */ //int x = 0x80000000; //int y = x >>1; //System.out.println("0x80000000="+Integer.toHexString(y)); //y = x >>>1; //System.out.println("0x80000000="+Integer.toHexString(y)); /* 移位运算的注意事项及小技巧 1 移位运算符适用数据类型为byte, short, char, int, long. 2 对低对int型的操作数将先自动转换为int型再移位 3 对于int型整数移位a>>b, 系统先将b对32取模,取到的结果才是真正移位的位数,例如 a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字 4 对于long型整数移位时a>>b,则是先将移位位数b对64取模 5 移位不会改变变量本身的值,如a>>1, 在一行语句中单独存在,毫无意义 6 x>>1 的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的,总之,一个数左移n位,就是等于这个数乖以2的n次方 一个数右移n位,就是等于这个数除以2的n次方, 请思考:如何用程序实现求2的X次方,答案: y = 1 << x; */ /*int x = 10; int y = x >> 2; //10 / 4 System.out.println("y:"+y); //2 int yy = x << 2;//10 * 4 System.out.println("yy:"+yy); //40 //00000010 //00001000*/ //运算符的优先级 //程序的流程控制 //顺序结构 //选择结构 //if 语句的选择结构 //循环结构 //顾名思义,顺序结构就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束 } };
class Lesson22 { public static void main(String [] args) { /*int x = 2; if(x < 3) { System.out.println("x小于3"); }else{ System.out.println("x大于3"); }*/ /* switch语句的选择结构 Switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; default: 语句n; } 1 default语句是可选的,它接受除上面接受值的其他值,通俗的讲,就是准也不要都给他 2 case后面可以跟多个语句,这些语句可以不用大括号括起来 3 switch语句判断条件可以接受int,byte,char,short型,不可以接受其他类型 4 一旦碰到第一次case,就会开始顺序执行以后所有的程序代码,而不穦后面的case条件是否, 后面的case条件下的代码都会被执行,直到碰到break语句为止,我们可以利用这个特点来用同一段语句处理多个case条件 */ //while循环语句 //do-while循环语句 /*int x = 1; do { System.out.println("x:"+x); x++; } while (x <=10);*/ //int x=0; /*try{ x = System.in.read(); }catch(Exception e){} while(x!='q') { System.out.println((char)x); try{ x = System.in.read(); }catch(Exception e){} }*/ /*do { System.out.println("请输入值:"); try{ x = System.in.read(); }catch(Exception e){} System.out.println("输入的值为:"+(char)x); } while ((char)x !='q');*/ //for循环语句 //break与continue语句 //变量的字节大小及有效取值范围 } };
class Lesson23 { //数组 //1 为什么时会有数组? //2 堆内存和栈内存 //3 int[] x; x= new int[100]的内存状态变化情况 public static void main(String[] args) { /*int x[] = new int[100]; int sum=0; for(int i=1; i<=100; i++) { x[i-1] = i; sum += x[i-1]; } System.out.println("sum:"+sum);*/ //栈内存,只有在此函数运行时存在此函数中定义的变量,某个函数在栈空间 //堆内存 //数组 //静态数组 //int ia[] = {1,2,3,4}; //int [] ib = new int[]{3,4,5}; //int a[5] //声明数组时,不能指定其长度,编译时将出错 //使用数组时要注意的问题 //空指针导常 //如何得到数组长度 //数组越界异常 //多维数组 //如何理解多维数组,类似我们的棋盘 //java中并没有真正的多维数组,只有数组的数组,java中多维数组不一定是规则的矩阵形式 //定义一个数组 /*int[][] xx; xx = new int[3][]; x[0] = new int[3]; x[1] = new int[2]; x[2] = new int[1];*/ //多维数组中元素的引用方式,如x[1][2] //规则矩阵数组可以在一条语句中产生,如: int xx[][] = new int[2][3]; //多维数组的静态初始化,如 int xx[][]={{3,3,4},{1,2},{1}}; /*int xx[][] = {{1,2,3},{1,2},{2}}; for(int i=0; i<xx.length; i++) { for(int j=0; j<xx[i].length; j++) { System.out.println("xx["+i+"]["+j+"]:"+xx[i][j]); } }*/ //与数组操作相关的函数 //使用System.arraycopy()函数拷贝数组 //用Arrays.sort来排序数组 //int [] ia = {3,2,5,6}; int[] x; x = new int[]{3,2,5,6}; /*java.util.Arrays.sort(ia); for(int i=0; i<ia.length; i++) { System.out.println("ia["+i+"]:"+ia[i]); }*/ int [] tia = new int[10]; System.arraycopy(x,0,tia,0,2); for(int i=0; i<tia.length; i++) { System.out.println("tia["+i+"]:"+tia[i]); } } };