这篇文章不只是一个教学,也是自己复习的一个笔记总结。有错的话希望有大佬提点一下,不全面等欢迎大家指出
关于java环境配置,先下载jdk,安装上后配置环境JAVA_HOME,PATH等,具体操作可以百度,里面一大堆。
编译器我用的是eplipse和vs,蛮舒服的,输入代码关键字再按Alt+/就会自动补全,很省事
JAVA语法格式
首先
JAVA中程序可分为结构定义语句 和功能执行语句:
结构定义语句:用于声明一个类或者方法;
功能执行语句:用于实现具体的功能;
功能执行语句结尾必须用英文分号【;】结束;如下
System.out.println("我的ph<7"); //绿色字为输出的内容
正题开始
编写JAVA代码时必须先声明一个类;
类的定义用关键字class 定义;
在定义类时,可以在class前加修饰符【修饰符】;在class后是你给这个类起的名字【命名规范】;
定义类的语法格式如下
(类名的定义和后续的方法名等习惯是英文,然后一个名称中有多个单词,就把单词的首字母大写,这样理解着方便,看着也方便。比如HelloWorld,一眼就能看出是两个单词,但helloworld辨识度就没那么高)
[修饰符] class 类名{
程序代码
}
例子(这就是一个最简单的小程序)
public class firstProgram {
public static void main(String[] args) {
System.out.println("撅腚的鸭子");
}
}
习题:读入三个整数,输出这三个整数中最大的一个(包括=的情况if及逻辑运算符及输入的使用)
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a=s.nextInt();
int b=s.nextInt();
int c=s.nextInt();
if(a >= b && a >= c){
if(a==b&&a!=c){
System.out.println("最大值是a和b="+a);
}
else if(a!=b&&a==c){
System.out.println("最大值是a和c="+a);
}
else if(a==b&&a==c){
System.out.println("abc一样大="+a);
}
else{
System.out.println("最大值是a="+a);
} //a最大的qingkuang
}
else if(b>=a&&b>=c){
if(b==a&&b!=c){
System.out.println("最大值是b和a="+b);
}
else if(b!=a&&b==c){
System.out.println("最大值是b和c="+b);
}
else if(b==a&&b==c){
System.out.println("abc一样大="+b);
}
else{
System.out.println("最大值是b="+b);
}
}
else if(c>=a&&c>=b){
if(c==a&&c!=b){
System.out.println("最大值是b和a="+c);
}
else if(c!=a&&c==b){
System.out.println("最大值是b和c="+c);
}
else if(c==a&&c==b){
System.out.println("abc一样大="+c);
}
else{
System.out.println("最大值是c="+c);
}
}
}
}
&|^
与(&)运算
与运算进行的是这样的算法:
0&0=0,0&1=0,1&0=0,1&1=1
在与运算中两个开关是串联的,如果我们要开灯,需要两个开关都打开灯才会打开。
理解为A与B都打开,则开灯,所以是1&1=1
任意一个开关没打开,都不开灯,所以其他运算都是0
通俗理解为A(与)&B都开则开,否则关
非(~)运算
非运算即取反运算,在二进制中1变0,0变1
110101进行非运算后为
001010即1010
或(|)运算
或运算进行的是这样的算法:
0&0=0,0&1=1,1&0=1,1&1=1
在或运算中两个开关是并联的,即一个开关开,则灯开。
如果任意一个开关开了,灯都会亮。
只有当两个开关都是关的,灯才不开。
理解为A(或)|B任意开则开
异或(^)运算
异或运算通俗地讲就是一句话
同为假,异为真
所以它是这样的算法:
0&0=0,0&1=1,1&0=1,1&1=0
>>和>>>区别
1、>>
带符号右移(相当于除以2)。正数右移高位补0,负数右移高位补1。比如:
4 >> 1,4的原码为0000 0000 0000 0000 0000 0000 0000 0100,右移一位后为0000 0000 0000 0000 0000 0000 0000 0010,转成十进制为2。
/*负数补码就是他的绝对值按位取反再加1*/
-4 >> 1,-4的原码为1000 0000 0000 0000 0000 0000 0000 0100,补码为1111 1111 1111 1111 1111 1111 1111 1100,右移一位后为1111 1111 1111 1111 1111 1111 1111 1110,再转成原码为1000 0000 0000 0000 0000 0000 0000 0010,转成十进制为-2。
2、>>>
无符号右移。无论是正数还是负数,高位通通补0。比如:
4 >>> 1,4的原码为0000 0000 0000 0000 0000 0000 0000 0100,右移一位后为0000 0000 0000 0000 0000 0000 0000 0010,转成十进制为2。
-4 >>> 1,-4的原码为1000 0000 0000 0000 0000 0000 0000 0100,补码为1111 1111 1111 1111 1111 1111 1111 1100,右移一位后为0111 1111 1111 1111 1111 1111 1111 1110,由于右移后符号位为1,即变成正数,所以原码与补码一样为0111 1111 1111 1111 1111 1111 1111 1110,转成十进制为2147483646。
形参和实参的数据传输
/*主调函数把实参的值传送给被调函数的形参进行数据传送,
函数调用中发生的数据传送是单向的,
只能把实参的值传送给形参,
而不能把形参的值反向地传送给实参
主函数实参不会改变
但如果方法里形参位置为对象,则主函数的参数也会改变
*/
不用长度的数字类型做运算&^|
public static void main(String[] args) {
System.out.println(-17>>2);//-5
System.out.println(-17<<2);//-68
System.out.println(-17>>>2);//1073741819
long l = -123;
int i = -2;
System.out.println(l&i);
System.out.println(l|i);
System.out.println(l^i);
System.out.println(100<<3);
}
&|^计算过程
-2
原码
1000000000000000000000000000000000000000000000000000000000000010
转补码
1111111111111111111111111111111111111111111111111111111111111110
-123转补码
1111111111111111111111111111111111111111111111111111111110000101
&
补码
1111111111111111111111111111111111111111111111111111111110000100
转原码
1000000000000000000000000000000000000000000000000000000001111100
|
补码
1111111111111111111111111111111111111111111111111111111111111111
得原码
1000000000000000000000000000000000000000000000000000000000000001
^
补码
0000000000000000000000000000000000000000000000000000000001111011
转原码
0000000000000000000000000000000000000000000000000000000001111011
123