corejava.docx
《corejava.docx》由会员分享,可在线阅读,更多相关《corejava.docx(38页珍藏版)》请在冰豆网上搜索。
![corejava.docx](https://file1.bdocx.com/fileroot1/2022-11/16/95c2582b-1cbe-462a-a523-4c0cc2583ac8/95c2582b-1cbe-462a-a523-4c0cc2583ac81.gif)
corejava
一corejava语法及OO
1.java基本数据类型之间的转换:
*基本转换原则:
byte->short->char->int->long->float->double(从左至右自动完成转换,
从右至左需进行强制转换)。
*当byte,short,char类型数之间相互运算时,先把他们都转换成int类型再进行计算。
*整数类型默认是int类型,浮点类型数默认是double型。
*把int类型数强制转换(指int类型为表达式时,例如intt1,t2;byteb=(byte)(t1+t2))成byte类型时如果超出byte范围,
采用的方法是砍掉int多余的三个字节,剩下的一个字节就是转换成的byte类型数的值(或者采用时钟法则)。
类似把long类型转换为int类型也是同理。
*int类型数(常数)转换成byte,short,char,只要不超过他们的范围,则转换自动完成。
(如byteb1=12)。
2.内存走势:
内存大致上可分为4个部分即代码段(存放方法和构造),栈内存(用来存放引用和局部变量),堆内存(大片内存,对象和属性一般存于此),池内存(存放静态变量和字符串常量)。
系统在内存中找对象的时候是先在栈内存中找出该对象的引用,然后利用找到的引用在堆内存中找出该引用所对应的对象。
3.?
:
(条件运算符),:
两边如果可以转成同一类型,则转成同一类型,否则,:
两边保持原有类型。
4..注意这两个程序:
publicclassTestCount{
publicstaticvoidmain(Stringargs[]){
Scannersc=newScanner(System.in);
inta=sc.nextInt();
if(a>0){
System.out.println("大于0");
}elseif(a==0){
System.out.println("等于0");
}else{
System.out.println("小于0");
}
}
}
publicclassTestCount{
publicstaticvoidmain(Stringargs[]){
Scannersc=newScanner(System.in);
inta=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语句相配对。
publicclassTestAddAdd{
publicstaticvoidmain(Stringargs[]){
inti=2;
System.out.println(i++);
System.out.println(i);
intb=i+++++i;
System.out.println(b);
for(intj=0;j<10;j++){
i=i++;//相当于b=i++;
//i=b
}
System.out.println(i);
}
}
程序输出:
2385
5.次数不固定的循环可以用break关键字跳出整个for循环。
例如看以下程序:
importjava.util.Scanner;
publicclassTestBreak{
publicstaticvoidmain(Stringargs[]){
Scannersc=newScanner(System.in);
for(;;){
Stringword=sc.next();
if(word.equals("bye"))break;
System.out.println("你说:
"+word);
}
}
}
6求三个数的最大数最简捷方法System.out.println(((a>b?
a:
b)>c)?
(a>b?
a:
b):
c);
或者intmax=a;if(b>max)max=b;if(c>max)max=c;
7.移位符号:
>>右移,eg:
7>>2,把7右移两位,即左补两个0,结果是1.-7>>2,把-7右移两位,即左补两个1,结果为-2.(a<
左移也是同样的道理。
>>>无符号右移,即不管正数还是负数,都是前补0.
8
(1)bytei=5;i+=1;
(2)bytei=5;i=i+1;在编译时第一种写法可以通过,而第二种写法却编译通不过。
原因在于第一种写法是复合赋值运算,第二种写法是简单赋值运算,而复合赋值运算符会自动地将运算结果转型为其左操作数的类型,而简单赋值运算符则不会即第一种写法会自动将运算结果转换为左操作数的类型即byte类型。
而第二种写法系统会认为将i+1的值赋给i是将int类型数转换为byte,所以要求强制转换。
9.当成员变量没有被赋初值时,系统会采用默认值(int为0double为0.0char什么也不输出String(null),但是局部变量(引用类型除外)必须被赋予初值才能使用
10.double类型数同样可以使用%取余运算符。
12.写一个彩票模拟器:
1~33,选7,要求无重复(用数组存下以前选择的数,然后和选出的数字比较,如果相等重新选择)
importjava.util.Scanner;
publicclassCaiPiaoT2{
publicstaticvoidmain(Stringargs[]){
Scannersc=newScanner(System.in);
int[]b=newint[33];
int[]a=newint[7];
for(inti=0;i<33;i++){
b[i]=i+1;
}
for(inti=0;i<7;i++){
intindex=sc.nextInt(33-i);//选取一个随机下标(1~33),选取后下一次选取数就是从1~32,依次循环
a[i]=b[index];//由随机下标从b中选取一个数赋值给a
b[index]=b[b.length-i-1];//把b中随后剩下的数的放在已经被选取的数的位置
}
}
}
第二种方法:
importjava.util.*;
importjava.util.Random;
publicclassCaiPiaoT{
publicstaticvoidmain(Stringargs[]){
Randomr=newRandom();
int[]re=newint[7];
for(inti=0;ire[i]=r.nextInt(33)+1;
for(intj=0;j
if(re[i]==re[j]){
i--;//如果本次选取的数和以前的任何一个数相等,则本次选取不算,接着进行选取,且下次选取的数将覆盖
break;//上次选取的数字。
}
}
}
}
13.类Random用来生成一个随机数,用法如下:
Randomr=newRandom();intd=r.nextInt(50)(50代表0~49之间的五十个数)。
14.int[]a={1,2,3,4,5,6,7};int[]b=newint[10];System.copyarray(a,2,b,5,5);依次输出b数组的各个元素为0000034567,System.copyarray(a,2,b,5,5)(数组拷贝)里的参数意义分别为:
源数组,原数组起始位置,目标数组,目标数组起始位置,拷贝元素个数。
15.int[][]a=newint[3][];System.out.println(a[0][0]);会产生空指针异常,因为没有指明一维数组的长度,所以系统无法为一维数组对象分配内存空间,即一维数组的引用没有指向任何内存区域,故会产生空指针异常。
(画内存分布图)
16.冒泡法排序:
(对数组进行多次遍历,每一次遍历都要比较所有相邻的两个元素,如果两者已有序就保持原状,否则就进行交换。
笔试通常会考)
int[]a={5,8,2,4,7,6,1,9};
for(inti=0;ifor(intj=0;jif(a[j]>a[j+1]){
inttemp=a[j];
a[j]=a[j+1];//如果前面的数大于后面的数则交换两个数的位置。
a[j+1]=temp;
}
}
}
17.看下面一个程序:
(求100以内的素数)
publicclassTestSu{
publicstaticvoidmain(Stringargs[]){
booleanb=true;
for(inti=2;i<101;i++){
for(intj=2;j
if(i%j==0){
b=false;
break;
}
}
if(b)System.out.println(i);
}
}
}
这道题给的启示是:
boolean类型变量可以用来区分事物的两种状态。
第二种做法:
publicclassTestSu2{
publicstaticvoidmain(Stringargs[]){
au:
for(inti=2;i<101;i++){
for(intj=2;j
if(i%j==0){
continueau;
}
}
System.out.println(i);
}
}
}//continue后面可以加一个标签,来决定跳出哪一层循环,同样break后也可以跟一个标签。
18.for循环的死循环表示形式为:
for(;;){}死循环可以用来处理次数不固定的循环问题,例如看以下程序:
importjava.util.Scanner;
importjava.util.Random;
publicclassTestRandom{
publicstaticvoidmain(Stringargs[]){
inti=0;
Scannersc=newScanner(System.in);
Randomr=newRandom();
intd=r.nextIn