1、corejava 一 corejava语法及OO1.java基本数据类型之间的转换:* 基本转换原则:byteshortcharintlongfloatdouble(从左至右自动完成转换, 从右至左需进行强制转换)。* 当byte,short,char类型数之间相互运算时,先把他们都转换成int类型再进行计算。* 整数类型默认是int类型,浮点类型数默认是double型。* 把int类型数强制转换(指int类型为表达式时,例如int t1,t2;byte b(byte)(t1t2))成byte类型时如果超出byte范围, 采用的方法是砍掉int多余的三个字节,剩下的一个字节就是转换成的byte
2、类型数的值(或者采用时钟法则)。 类似把long类型转换为int类型也是同理。*int类型数(常数)转换成byte,short,char,只要不超过他们的范围,则转换自动完成。(如 byte b112)。2.内存走势:内存大致上可分为4个部分即代码段(存放方法和构造),栈内存(用来存放引用和局部变量), 堆内存(大片内存,对象和属性一般存于此),池内存(存放静态变量和字符串常量)。系统在内存中找对象的时候是先在栈内存中找出该对象的引用,然后利用找到的引用在堆内存中找出该引用所对应的对象。3. ? : (条件运算符),:两边如果可以转成同一类型,则转成同一类型,否则,:两边保持原有类型。4. .
3、注意这两个程序: public class TestCount public static void main(String args) Scanner sc = new Scanner(System.in); int a = sc.nextInt(); if(a 0) System.out.println(大于0); else if(a = 0) System.out.println(等于0); else System.out.println(小于0); public class TestCount public static void main(String args) Scanner s
4、c = new Scanner(System.in); int a = sc.nextInt(); if(a 0) System.out.println(大于0); if(a = 0) System.out.println(等于0); else System.out.println(小于0); 当输入2的时候,第一个程序输出:大于0,而第二个程序输出:大于0 小于0(说明:当有多个if语句出现时,else语句总是和离它最近的一个if语句相配对。 public class TestAddAdd public static void main(String args) int i = 2; Sys
5、tem.out.println(i+); System.out.println(i); int b = i+ + +i; System.out.println(b); for(int j=0;jb?a:b)c)?(ab?a:b):c); 或者int max = a;if(b max) max = b;if(c max) max = c; 7.移位符号: 右移,eg:72,把7右移两位,即左补两个0,结果是1. 72 ,把7右移两位,即左补两个1,结果为 2. (ab在编译的时候会转化为a 无符号右移 ,即不管正数还是负数,都是前补0.8(1)byte i = 5;i += 1;(2)byte
6、i = 5;i = i1;在编译时第一种写法可以通过,而第二种写法却编译通不过。原因在于第一种写法是复合赋值运算,第二种写法是简单赋值运算,而复合赋值运算符会自动地将运算结果转型为其左操作数的类型,而简单赋值运算符则不会即第一种写法会自动将运算结果转换为左操作数的类型即byte类型。而第二种写法系统会认为将i1的值赋给i是将int类型数转换为byte,所以要求强制转换。9 .当成员变量没有被赋初值时,系统会采用默认值(int 为 0 double 为 0 .0 char什么也不输出String(null),但是局部变量(引用类型除外)必须被赋予初值才能使用10.double类型数同样可以使用取
7、余运算符。12.写一个彩票模拟器:133,选7,要求无重复(用数组存下以前选择的数,然后和选出的数字比较,如果相等重新选择) import java.util.Scanner; public class CaiPiaoT2 public static void main(String args) Scanner sc = new Scanner(System.in); int b = new int33; int a = new int7; for(int i=0;i33;i+) bi = i+1; for(int i=0;i7;i+) int index = sc.nextInt(33-i)
8、;/选取一个随机下标(133),选取后下一次选取数就是从132,依次循环 ai = bindex;/由随机下标从b中选取一个数赋值给a bindex=bb.length-i-1;/把b中随后剩下的数的放在已经被选取的数的位置 第二种方法: import java.util.*; import java.util.Random; public class CaiPiaoT public static void main(String args) Random r = new Random(); int re = new int7; for(int i=0;ire.length;i+) rei =
9、 r.nextInt(33)+1; for(int j=0;ji;j+) if(rei=rej) i-; /如果本次选取的数和以前的任何一个数相等,则本次选取不算,接着进行选取,且下次选取的数将覆盖 break; / 上次选取的数字。 13.类Random用来生成一个随机数,用法如下:Random r = new Random();int d = r.nextInt(50)(50代表049之间的五十个数)。14.int a = 1,2,3,4,5,6,7;int b = new int10; System.copyarray(a,2,b,5,5); 依次输出b数组的各个元素为 00000345
10、67 ,System.copyarray(a,2,b,5,5)(数组拷贝)里的参数意义分别为:源数组,原数组起始位置,目标数组,目标数组起始位置,拷贝元素个数。 15.int a = new int3;System.out.println(a00);会产生空指针异常,因为没有指明一维数组的长度,所以系统无法为一维数组对象分配内存空间,即一维数组的引用没有指向任何内存区域,故会产生空指针异常。(画内存分布图)16.冒泡法排序:(对数组进行多次遍历,每一次遍历都要比较所有相邻的两个元素,如果两者已有序就保持原状,否则就进行交换。笔试通常会考) int a = 5,8,2,4,7,6,1,9; fo
11、r(int i=0;ia.length-1;i+) /控制几轮循环 for(int j=0;jaj+1) int temp = aj; aj = aj+1; /如果前面的数大于后面的数则交换两个数的位置。 aj+1 = temp; 17.看下面一个程序:(求100以内的素数) public class TestSu public static void main(String args) boolean b = true; for(int i=2;i101;i+) for(int j=2;ji;j+) if(i%j = 0) b = false; break; if(b) System.out
12、.println(i); 这道题给的启示是:boolean类型变量可以用来区分事物的两种状态。 第二种做法: public class TestSu2 public static void main(String args) au:for(int i=2;i101;i+) for(int j=2;ji;j+) if(i%j = 0) continue au; System.out.println(i); /continue后面可以加一个标签,来决定跳出哪一层循环,同样break后也可以跟一个标签。18.for循环的死循环表示形式为:for(;) 死循环可以用来处理次数不固定的循环问题,例如看以下程序: import java.util.Scanner; import java.util.Random; public class TestRandom public static void main(String args) int i = 0; Scanner sc = new Scanner(System.in); Random r = new Random(); int d = r.nextIn
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1