java基础1

来源:互联网 发布:php程序员的工作状态 编辑:程序博客网 时间:2024/06/16 05:51



睡不着所以想看下java基础,随便整理一下笔记鄙视

1.进制

6是十进制,如果转为二进制是110
八进制:每一位对应二进制的三位111刚好等于7
十六进制;每一位对应二进制的4位1111刚好等于14

对于整数:有四种表现形式。
二进制:0,1 ,满2进1.
八进制:0-7 ,满8进1. 用0开头表示。
十进制:0-9 ,满10进1.
十六进制:0-9,A-F,满16进1. 用0x开头表示

如果想把一个整数转为负数:
步骤:第一步转二进制,第二步取反,第三步加1
-----------把6变为-6-----------
0000 0110 二进制
1111 1001 取反
1111 1010 加1


负数二进制的最高位是1,整数是0
如果一个负数转为整数,先-1,再取反


2.java的基本类形

--------------------------整数类型----------------------------------

//整数默认:int

byte字节:8个二进制位,取值-128到127
short短整形:16个二进制位
int整数:32个二进制位
long长整型:64个二进制位


--------------------------浮点型---------------------------------

//小数默认:double

float单精度:32个二进制位
double双精度:64个二进制位


---------------------------字符型---------------------------------

//char里面可以装中文,但只能装一个中文

char字符型:16个二进制位


-------------------------------------------布尔型--------------------------------------

boolean布尔型:1个二进制


数据类型 大小 范围 默认值 
byte(字节) 8 -128 - 127 0
shot(短整型) 16 -32768 - 32768 0
int(整型) 32 -2147483648-2147483648 0
long(长整型) 64 -9233372036854477808-9233372036854477808 0 
float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
boolean(布尔型) 1 true/false false



3.自动类形转换

1.自动类形提升

大的类型与小的类型在一起的时候以大的类型为主
如:一个bety加上一个int,得到的值付给int,哪这个bety会自动类形提升为一个int
例子;
byte b=3;  一个byte 代表一个字节:在二进制中3代表的是:00000011
int x=5;  一个int是4个字节,一个字节00000000,在二进制中5代表的是:00000000 00000000 00000000 00000101
x=x+b;  x是4个字节,b是一个字节,最小的b可以向最大的x(自动类形提升)转为同样是4个字节,付值给左边的int x同样是4个字节,
x=00000000 00000000 00000000 00000011 + 00000000 00000000 00000000 00000101;

2.强制类形转换(但这样很容易掉失精度)

byte b=3; 
b=b+4;  b是byte一个字节,4默认是int四个字节,口=口+口口口口; 自动类形提升后,口=口口口口+口口口口,左边的b只有一个字节不能放下4个字节的值;
会出现丢失精度,解决方法,强制类形转换,b=(byte)(b+4);一般这种方法好少用,可能会丢失精度,如果值超出了所指定的byte的最大值(-127到128)就会出现负数,
比如:
byte 127;
byte b =(byte)127+2;自动类形提升后的2是4个字节的int,
129的二制值00000000 00000000 00000000 10000001
强制类形转换后byte一个字节:10000001(这里肯定是一个负数)
整数转为负数,先-1:10000001,减一后:10000000
再取后:1111111 ,转为十进制后127 ,所以找印出来的值是-127

3.练习:

-----------------char----------------------
System.out.println('a');//会打印a
System.out.println('a'+1);//会打印98,a码表中表示97,同是‘a’是两个字节与1是4个字节相加,类型提升是4个字节的int
System.out.println((char)('a'+1));//强制类型转换打印是'b'
System.out.println('你'+0)//如果想知道'你'字对应的数字是多少与0相加就得了

------------------byte----------------------------
--------两个常量相加编辑器自动类型型转换------------
byte b=4;
b=5+2;
//二行都没有出错,打印"7"
//在java中默认的数字是int,所以4是int类型,编辑器在编辑的时候发现4是在byte类型中,所以自动转换
//所以b=4;与b=5+2;两行原理都是一

-------有一个如果是变量,类型不固定,编辑不会自动转变-------------
byte b=4;
byte b1=5,b2=2;
b=b1+b2;
//打印可能损失精度,b=b1+b2;与b=b1+4;原理一样,(4是int类型)
//因为这里b1使用的是变量,因为变量是不固定的b1有可能是100000,所以可能会损失精度
//----------解决方法强制类型转换--b=(byte)(b1+b2);
----总结-----
右边两个固定的常量相加,符值给左边可以自动类型转换。
右边如果是常量,类型不固定,编辑无法自动类型转换


4.语句

只说几个语句的特点。

1.switch语句

如:switch语句。如果所以的case条件都没有通过,就会执行default里面的代码,如果default里面没有default就会执行下一行的case里面的内容。
在这里会打印“no”,“c”,"a"
int x = 3;
switch(x)
{
default:
System.out.println("no");//在这里没有break

case 1:
System.out.println("c");//在这里没有break

case 4:
System.out.println("a");
break;
case 2:
System.out.println("b");
break;

2.for语句

1.先说下for语句的运行步骤:步骤运行的顺序标记了数字

for(初始化表达式1;循环条件表达式2,5 ;循环后的操作表达式4)
{
3,6 执行语句;(循环体)
}

注意:循环条件表达式2里面的内容必须有写,不然就会无限循环。

2.下面的例子是通过的,不会出现无限循环如:

int y = 1;
for( ; y<3 ; )
{
y++;
}


3.给for随便起个名字,起跳出哪个循环就break加for的别名
wai:for(int x=0; x<4; x++)
{
nei:for(int y=0; y<6; y++)
{
System.out.println("x="+x);
//break;如果没有别名结束的是当前循环。
break wai;//写上别名,所以结束的是指定别名上的循环

}
}
}


5.运算符

1.比较运算符



1.1   &与运算符
true & false = false;
false & true = false;
false & false = false;
true & true = true;
&:只有两边为true结果为true,否则为false。
或者 只要有一边为false,结果是false。

 1.2 | 非运算符
true | false = true;
false | true = true;
true | true = true;
false | false  = false;
|:只有两边都为false,结果为false,否则为true。
只要有一边为true,结果是true。

& 和 && 的区别:
&:无论左边结果是什么,两边都参与运算。
&&:当左边为false时,右边不参与运算。


| 和 || 的区别:
|:无论左边结果是什么,两边都参与运算。
||:当左边为true时,右边不参与运算。
 1.3  ^异或运算符
true ^ false = true;
false ^ true = true;
false ^ false = false;
true ^ true = false;
^:两边相同为false,不同为true。

2.位运算符(位运算符运算快)



  2.1 <<左移运算符
3<<2=?  
因为在java中,一个int是32位,所以3的二进制是:
00000000 00000000 0000000 0000011:这个就是3的二进制码
00000000 00000000 0000000 0001100:左移二位,后面拿0补上(记位数的值:1248)
在计算机上算:按下十进制3,转二进制得到11,在后面加上两个零,得到是12.
口算技巧:技巧: 3<<2=12  3*2(位幂)   3*(2*2)=12
 2.2 右运算符:>>
6>>1=?
00000000 00000000 0000000 0000110:这是6的二进制
00000000 00000000 0000000 0000011:右移一位 ,结果是3
技巧:6>>1=3   6/2(1)=3
6>>2=1  6/2(2)=1//6/4=1不有余数
  2.3>>左移运算与>>>无符左移动算的距别
>>:高位出现空位时,原高位是什么,就补上什么:10000000 00000000 0000000 0000110  左移两位:11100000 00000000 0000000 0000110
>>>:无论高位是什么,都是补0         10000000 00000000 0000000 0000110 无符号左移两位:00100000 00000000 0000000 0000110


2.4  与运算符:&
6&3=2
110
   &011
————————0是假,1是真:如果两个为真的时候才会真
    010   所以得到的数是2

应用场影1:0010101101  如果想得到后四位可以用到&运算符,
&0000001111   与上4个1是15来的    //如果与上255或者0xff刚好一个8位的11111111
-----------------如果两个都是1才是1
 0000001101:这样就可以得到后4位的算了
 
应用场影2:>>>000011110101 左移4位,可以得到中间的4位,两个运算符一起用可以得到中间的数
&001110001111
————————————————————————
0000000000111
  2.5或运算符:|
  6 |3=7
 110
|011
————如果有真都是真
 111 
  2.6异或运算符:^
6^4=2
 110
^100
____如果相同为0,不同为1
 010


 应用场景:一般用于加密:
 6^4=2
 110
^100
____如果相同为0,不同为1
 010
^100 再与原数据异或,就可以得到原数据了
----
 110
  2.6反码运算符:~
 ~6=-7
 取反=-6,再加1 等于-7
 
 因为~6的反码是-7
 如果想得到6的负数表现形式,所以+1
 这样才是6的负数表的二制的表达形式
 
 (6的负数,等于6的反码加1 ,如果不加1,等于-7)
  负数二进制的转换 ,负数的二进制最高位是1
   0000 0110   :6
   1111 1001 :取反,0变1,1变0
   1111 1010 :+1 这样就得到-6了



3.算术运算符



 3. 1 %取模动算(得到余数)
5%2=1
2%6=2
3%6=3
左边=右边=0  如:-6%-6=0
左边小于右边=左边    如:3%-6=3

  3.2 自增动算(++)
自增运算符放在前面与放在后面是有区别的
int a=3,b;
b=a++;//如果++放在后面,打印b=3,a=4
---------------
int a=3,b;
b=++a//如果++放在前面,打印b=4, a=4

  3.3 付值动算(=,+=,-=,*=,/=,%=)
-----(=)------
int x,y,z;
x=y=z=4;//都是4


-----(+=)------
int a=3;
a+=2;//相当于a=a+2;,如果非有什么不一样,可以看下面的例了
//打印5
-------这两个例子,不一样在于有一个需要手动转换(+=)------------------------
short s=4;
s=s+5;//损失精度,因为short是2字节,5是int4字节,转换后的4个字节不能放进short里
------------
short s=4;
s+=5;//编译通过,赋值动算,具备自动转换


4.三元运算符(在这不举例子)











0 0
原创粉丝点击