一、 注释
/** ------------------------------------------------>这是文档注释
这个类是用于演示hello world.
*/
class HelloWorld{//-------------------------->这是单行注释
/* ------------------------------------------->这是多选注释
这是多行注释
main函数可以保证该类的独立运行.
它是程序的入口.
它会被JVM所调用
*/
public static void main(String[] args){
System.out.println("Hello World!");
}
}
从上面的代码和注释可以看到,java语言中的注释主要可以分为三类
1.单行注释: //
2.多选注释(也称为块注释):
/*
*/
3.文档注释:这个很重要,是java特有的注释,自动生成文档
/**
*/
文档注释
javadoc 注释标签语法大体有以下几种
@author 对类的说明标明开发该类模块的作者
@version 对类的说明标明该类模块的版本
@see 对类、属性、方法的说明参考转向,也就是相关主题
@param 对方法的说明对方法中某参数的说明
@return 对方法的说明对方法返回值的说明
@exception 对方法的说明对方法可能抛出的异常进行说明javadoc可以帮助生成一个说明书,这个网页文档是给开发人员用的
注释是不被编译到class字节码中.注释的作用:1注解说明;调试使用.
二、进制
3个二进制位是1个八进制位(八进制以0开头,同时对于二进制位按3位分的时候高位不够时补0即可);
4个二进制位是1个十六进制位(十六进制以0x开头,同样在高位补0)。负数的表现形式:正数的二进制取反,再加1.
三、变量和数据类型
1.特别注意了整数的默认类型为int型,小数的默认类型为double型,因此,在初始化long型和float型的变量时一定要再上l和f.
2.数据类型之间的转换有两种:
(1)自动类型转换(隐式类型转换)
(2)强制类型转换(显式类型转换)表达式的数据类型自动提升:
所有的byte型,short型和char型的将自动提升为int型;
如果一个操作数是long型,那么计算结果也是long型;
如果一个操作数是float型,那么计算结果也是float型;
如果一个操作数是double型,那么计算结果也是double型;我们看出占内存小的自动提升为占内存大的数据类型。
而当我们要把占内存大的数据类型转换成占内存小的数据类型时必须要强制转换,当然有可能造成精度降低或溢出,所以在使用时一定要格外注意。
四、运算符
符值运算符
class OperateDemo2 { public static void main(String[] args) { //赋值运算符 = += -= *= /= %= int a,b,c; a = b = c = 4; int a1 = 4; a1 += 2;//a1 = a1 + 2; short s = 3;//赋值,s是两个字节,3是四个字节,自行检测 //s += 4;//这个在底层做了自动转换 //s = s + 4;//这个报错,缺失精度,不能自动转换,把int类型存入short中 s = (short)(s + 4);//等价于s += 4; System.out.println("s="+s); } }
比较运算符
class OperateDemo3 { public static void main(String[] args) { //比较运算符 > < == >= <= != instanceof(是不是实例) //比较运算符,运算要么为真,要么为假,true or false System.out.println(3>2);//true /*逻辑去处符 &(与) |(或) ^(异或) !(非) &&(双与) ||(双或) x > 2 && x < 5 等价于 2<x<5 逻辑运算符是用于连接两个boolean类型的表达式 &:符号的去处特点: true & true = true; true & false = false; false & false = false; false & true = false; &:运算规律: 运算的两边只要有一个是false,结果一定为false;只有两边同为true,结果才为true |:运算特点: true | true = true; true | false = true; false | false = false; false | true = true; |:运算规律: 去处两过只要有一个是true,结果为true;只有两边都为false,结果才为false ^:异或:和或有点不一样. ^:运算特点: true | true = false; true | false = true; false | false = false; false | true = true; ^:运算规律: 两边的结果相同,结果为false;两边的结果不同,结果为true. !:运算特点:!true = false; !false = true; &&和||可以短路运算 &&:当左边为false时,右边不再参与运算 ||:当左边为true时,右边不再参与运算 */ int x = 3; System.out.println(x>2&x<5); System.out.println(x<2|x>5); } }
位运算符
class OperateDemo4 { public static void main(String[] args) { /* 位运算符:二进制 &(与) |(或) ^(异或) ~(去反) <<(左移) >>(右移) >>>(无符号右移) 6 & 3 = 2 0000-0000 0000-0000 0000-0000 0000-0110 6 &0000-0000 0000-0000 0000-0000 0000-0011 3 ----------------------------------------- 0000-0000 0000-0000 0000-0000 0000-0010 2 6 | 3 = 7 0000-0000 0000-0000 0000-0000 0000-0110 6 |0000-0000 0000-0000 0000-0000 0000-0011 3 ----------------------------------------- 0000-0000 0000-0000 0000-0000 0000-0111 7 6 ^ 3 = 5 0000-0000 0000-0000 0000-0000 0000-0110 6 ^0000-0000 0000-0000 0000-0000 0000-0011 3 ----------------------------------------- 0000-0000 0000-0000 0000-0000 0000-0101 5 6 ^ 3 ^ 3 = 6:一个数异或同一个数两次,结果还是这个数. 3 << 2 = 12 3 << 3 = 24 //向左移几位,左边的几位就被舍取,右边加几个0 0000000000000000000000000000011 3 0000000000000000000000000001100 12 @左移几位,其实就是该数乘以2的几次方,可以完成2的次幂运算 6 >> 1 = 对于高位出现的高位,原来最高位为0,就用0补位,原来最高位为1,就用1补位 右移几位其实就是该数据除以2的几次方 >>>:无符号右移:数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补. */ System.out.println(6 & 3);//6在计算中:0000-0000 0000-0000 0000-0000 0000-0110 System.out.println(6 | 3); System.out.println(6 ^ 3); System.out.println(~6);//-7 System.out.println(3 << 2);//左移两位,相当于乘以2的2次方 } }
左移几位,其实就是该数乘以2的几次方,可以完成2的次幂运算 右移几位其实就是该数据除以2的几次方
三元运算符
class OperateDemo5 { public static void main(String[] args) { /* 三元运算符: 格式:(条件表达式)?表达式1:表达式2 如果条件为true,运算表达式1 如果条件为false,去处表达式2 */ int x = 3,y; y = (x > 1) ? 100 : 200; System.out.println("y="+y); //三元运算符的一个小应用 //获取两个整数中的较大的整数 int x1 = 3; int y1 = 4; int max = (x1>y1)?x1:y1; System.out.println(max); //获取三个整数中的最大的整数 int o,p,q; o = 5; p = 6; q = 4; int temp = (o>p)?o:p; int max1 = (temp>q)?temp:q; } }
测试题:
class OperateTest
{
public static void main(String[] args)
{
//最有效率的方式算出2乘以8等于几?
System.out.println(2 << 3);
System.out.println(8 << 1);
//对两个整数变量直接互换(不需要第三方变量)
int a = 3,b = 5;
/*
阅读性好,开发时用
int c;
c = a;
a = b;
b = c;
*/
/*
这种方式一般不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会变化.
a = a + b;
b = a - b;
a = a - b;
*/
/*
面试时用,可读性差
a = a ^ b;//a = 3 ^ 5;
b = a ^ b;//(3 ^ 5) ^ 5;
a = a ^ b;//(3 ^ 5) ^ 3;
*/
System.out.println("a="+a+",b="+b);
}
}