JAVA 自学笔记(自用)

这篇文章不只是一个教学,也是自己复习的一个笔记总结。有错的话希望有大佬提点一下,不全面等欢迎大家指出
关于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都开则开,否则关

非(~)运算
非运算即取反运算,在二进制中10,01
110101进行非运算后为
0010101010

或(|)运算
或运算进行的是这样的算法:
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 >> 14的原码为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,转成十进制为-22>>>
无符号右移。无论是正数还是负数,高位通通补0。比如:

4 >>> 14的原码为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


你可能感兴趣的