java入门笔记

预备知识

  • JDK用的是8

  • module相当于一个项目,多个mudule之间相互独立

  • project相当于一个工作站

  • src目录用来存储所有的源码

  • src要打上源代码根目录标签

语法

关键字

全部小写

标识符

只能由数字 或字母或 $或_ 组成且只不能以数字开头

命名规则

核心规则:见名知意

    • 作用:将类按功能分类,保证相同类名不重复
    • 单级包:com
    • 多级包:com.xzk.a 域名反转法。创建需要先去掉齿轮中的一个勾
  • 类和接口
    • 单个单词:首字母大写其余全部小写 Max
    • 多个单词:每个单词首字母大写,其余全部小写。 ChinaStu
  • 变量和方法
    • 单个单词:所有字母全部小写 min
    • 多个单词:首个单词小写,后面的单词每个单词首字母大写。 chinaNoOne
  • 常量
    • 单个单词:全部大写
    • 多个单词:全部大写且以_分割
注释
  • 单行注释 //

  • 多行注释

    - /*内容*/
    
  • 文档注释

    /**内容*/   
    
常量
  • 字面常量
    • 字符串常量 “nihao”
    • 整型常量 1
    • 字符常量 ‘我’ ‘a’
    • 布尔常量 true or false
    • 空常量 NULL
  • 自定义常量
进制转换
System.out.println(0b1100)  //表示二进制输出
System.out.println(011)  //表示八进制输出
System.out.println(11)  //表示十进制输出
System.out.println(0x11)  //表示十六进制输出

原码:最高位为符号位的二进制码 弊端:符号位和数值位要分开计算

补码:符号位和数值位可以一起参与数值计算,内存中存在的形式,补码的补码就是原码

  • 正数:原码和补码一样
  • 负数:原码的数值位取反,符号位不变,然后+1
对0的思考

原码中

  • 正 0000 0000
  • 负 1000 0000
  • 原码表示范围 -127~127

补码中:0000 0000

  • 由于原码中0的表示有两个,所以让补码多表示一个负数,-128(字长为8),所以补码比原码多表示一个值

注:输出的值是原码转换而来,而计算机内存中存储的值,做运算的是补码

变量
数据类型
  • 基本数据类型

    • 数值型

      • 整数型

        类型长度(字节)
        byte1
        short2
        int(整数默认)4
        long8
      • 浮点数型

        类型长度(字节)
        float4
        double(小数默认 )8
    • 字符型 char

    • 布尔型 boolean

  • 引用数据类型

    • 类class
    • 接口interface
    • 数组[]

赋值原则:

单个变量:不能超过能表示范围

变量的运算:不能由高精度向低精度赋值

转换规则:

  • 低精度会自动向高精度转换 byte,short,char->int->long->float->double

  • boolean类型不能转换

  • 强制转换格式 : (类型)(变量表达式)

  • byte,short,char相互之间不能转换,这三者之间运算,或者本类型与本类型运算会先转换为int型

面试题:

byte b1 = 1, b2 = 2, b;
b = b1 + b2;   //两个byte类型参与运算,首先会被转换为int。
b = 1 + 2;	//编译器简单的判断了一下,虽然是两个int型数据相加但是不会超出byte的表示范围

使用变量的注意:

  • 有效范围只在所定义时的{}内

  • 使用前要初始化

运算符
加减乘除操作

加法

// 1.加减乘除操作  +-*/
int number1  = 1;
int number2 = 2;
System.out.println(number1 + number2);
System.out.println(number1 * number2);
System.out.println(number1 / number2);  //整除
System.out.println(number1 - number2);

// 拼接  只要操作数里面有一个字符串 +操作就是字符串拼接
System.out.println('a'+ 1);  //这里算出来的是a的ascll码 +1
System.out.println("HELLO"+ 1);
System.out.println("HELLO"+ 1 + 'a');  // 字符串在第一个,所以依次作字符串拼接操纵
System.out.println(1 + 'a' + "HELLO");  // 字符串在后 所以先做完前面的运算 再拼接
System.out.println("5+5=" + 5 + 5);
System.out.println(5 + 5 + "=5+5");

除法 同c语言一样

//整数相除向下取整
System.out.println(number1 / number2);  //整除

取余

int f = 5 % 3;
System.out.println(f);
科学计数法

同c e前e后必有数,且是整数

自增/减
//也和c一样
//练习
int a = 4, b;
b = (a++) + (++a) + (a * 10);
// b = 4 + 6 + 60 = 70
System.out.println(b);
赋值运算符

同c

关系运算符

基本上同c 多了一个 instanceof 检查是否是类的对象

逻辑运算符
//同c有一些不同
/*
&和&&都是与
&&  比较智能 会出发短路效应
&   这种与比较死板,即使第一个操作时已经是false,此时仍然会取计算第二个操作数,
    在八计算好的两个操作数的结果,作与运算,得到最后的结果

||和|都是或 和与一样 ,||有短路效果

^异或 
两个性质:
相同为0,0异或n等于n
!false true 互换

*/
int number3 = 1, number4 = 2;

/*  boolean flag = (number3 > number4) & (number3++);
    报错:operator & cant applied to boolean and int
    原因:& 右边不是布尔类型, 执行的就是按位与。好像不能像c语言一样 直接判断非0的int型变量 为ture,

*/
boolean flag = (number3 > number4) & (number3++ != 1);
System.out.println(number3);    //  2 说明操作数二被执行了,没有短路效应
boolean flag2 = (number3 > number4) && (number3++ != 1);
System.out.println(number3);    //  2 说明第二个操作数没有执行

//表示一个范围时,和c一样,不能直接写成数学表达式, a<b<c
//关系运算符是逻辑运算符的操作数 所以关系运算符的优先级比逻辑运算符更高



位运算:

内容:左移<< 有符号右移>> 无符号右移>>> I & ^ ~

位运算是对补码进行的运算 且并没有改变原来变量得值,要改变必须赋值才行。

左移 <<

和c一样

带符号右移 >>

带符号右移 -2 >> 1,相当于操作数/2(只针对,未溢出,可以被2除尽的情况)

​ 10000000.00000000.00000000.00000010

补码 11111111.11111111.11111111.11111119

补码右移1位 高位补符号位 11111111.11111111.11111111.11111111

转会原码显示 10000000.00000000.00000000.00000001 -》-1

溢出情况

-1 >> 1

原码: 10000000.00000000.00000000.00000001

补码: 11111111.11111111.11111111.11111111

右移: 11111111.11111111.11111111.11111111 //-1 不断移多少位都是-1

得: -1

故下溢

3 >> 1 = 1

00000000,00000000,00000000,00000011 -> 00000000.00000000.000000000.00000001 ->> 1

无符号右移 >>>

最高位进位0 用来处理正整数

按位与 或 异或 非 同c

异或运算得性质

一个数和它自己异或一定是0

0和任何数异或都是这个数本身: 0 ^ a = a

按位取反~(包括符号位都取反)
//验证一下异或性质
// 性质1  一个数和它自己异或一定是0
int number5 = 5, number6 = 0;
System.out.println(number5 ^ number5);  //  相同为0
System.out.println(number6 ^ number5);  //  0与任何数异或都是那个数
位运算练习
//1:  请用最有效率的方式写出计算2*8的结果
System.out.println(2 << 3);

//2:  请自己实现两个参数变量的交换
//四个方法
//1.临时temp中间变量交换 (实际开发使用)
//2.+--两数做差交换
//3.位运算 异或交换
//4.一句话解决


//方法三:利用异或性质交换
int number7  = 7, number8 = 6;
/*
number7:    00000000.00000000.00000000.00000111
number8:    00000000.00000000.00000000.00000110
*/
number7 = number7 ^ number8;
number8 = number7 ^ number8;    //  number7 = number7 ^ number8 ^ number8 结合律加异或运算的性质
number7 = number7 ^ number8;    //  number8 = number7 ^ number8 ^ number7
System.out.println(number7);
System.out.println(number8);

//方法四:一句话就很猛
int number9 = 10, number10 = 200;
number9 = (number9 + number10) - (number10 = number9);
System.out.println(number9);
System.out.println(number10);

//ctrl + alt + l 自动调整选中的代码格式
//ctrl + shift + / 选中行注释
//ctrl + / 选中行使用单行注释

//注:java运算符的优先级
//不用记 为了代码的可读性 多用括号达到想要的效果
键盘录入:
public class Structure {
    public static void main(String[] args){
        //键盘录入数据,必须通过scanner 对象来使用其功能
        Scanner sc = new Scanner(System.in);
        Scanner strsc = new Scanner(System.in);

        //接受输入
        int i = sc.nextInt();//  输出一个字符串常量
        System.out.println(i);

        String str = strsc.nextLine(); //  输入一个字符串常量
        System.out.println(str);

        boolean b = sc.nextBoolean();
        System.out.println(b);
        sc.close(); // 对象用完要关闭??

        //注意点:
        //nextBoolean 和 nextInt 都是以空格,回车为分隔
        //nextLine 以回车作为数据的分隔符
        //推荐做法:
        //如果既要读取普通数据,也要读取字符串nextLine(读取一行字符串),用两个Scaner对象
        //如果导入别人的项目时,遇到了compiler output 就要设置中Project structure -》project中修改 output路径
        //没有可以自己新建一个out目录

   


    }
}

程序结构:

顺序结构

没啥好说的,顺序执行

选择结构

基本上也和c没啥差别,做两道练习题就吧。

一下要点

  • 三目运算符和双分支结构的异同
  • 两个双分支语句练习题
  • 两个switch语句练习题
  • if esle 语句与switch语句不同的应用场景
package sequential;

import java.util.Scanner;

public class demo1 {
    public static void main(String[] args){
/*      
        选择结构 同c
        注意 三目运算符和双分支结构语义基本相同
        但是三目运算符的运算结果必须要有值

        if条件分支练习
        if的条件必须是boolean类型的结果
        // 1:x和y的关系满足如下:
        x>=3	   y = 2x + 1;
        -1<=x<3	  y = 2x;
        x<=-1	  y = 2x – 1;
        */
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y;
        if (x >= 3) {
            y = 2 * x + 1;
        }
        else if (x <= -1) {
            y = 2 * x - 1;
        }
        else {
            y = 2 * x;
        }
        System.out.println("x = " + x + "时:y = " +  y);

        // 2.三者取大
        int a = 100, b = 99, c = 80, temp;
        if (a > b){
            temp = a;
        }
        else
            temp = b;
        temp = temp > c ? temp : c;
        System.out.println(temp);

        //  switch语句
        //  注意事项
        // 1.switch 表达式的结果类型
        //  表达式的取值:byte,short, int, char
        //  JDK7以后可以是:string 字符串
        // 2.case 后面的值不能相等,必须得是常量值,必须和表达式的类型一致

        // 练习题
        // 1.用switch实现单项选择
        Scanner sc2 = new Scanner(System.in);
        String str = sc2.nextLine();    //  输入的字符串
        char d = str.charAt(0); //读取字符串的首字符

        switch (d){
            case 'A': System.out.println("宁的女神是:卢本伟");  break;
            case 'B': System.out.println("宁的女神是:赵本山");  break;
            case 'C': System.out.println("宁的女神是:刘德华");  break;
            case 'D': System.out.println("宁的女神是:高圆圆"); break;
            case 'R': System.out.println("宁的女神是:baby");  break;
            case 'F': System.out.println("宁的女神是:范冰冰");  break;
            default:  System.out.println("宁没有女神");  break;
        }
        //  2.输入月份 输出季节
        //Scanner sc3 = new Scanner(System.in);

        int mouth = sc.nextInt();
        switch (mouth){
            case 12: case 1: case 2:
                System.out.println("冬季"); break;
            case 3: case 4: case 5:
                System.out.println("春季"); break;
            case 6: case 7: case 8:
                System.out.println("夏季"); break;
            case 9: case 10: case 11:
                System.out.println("秋季"); break;
            default:
                System.out.println("没有这个月份"); break;
        }
        // if和switch的使用场景
        //if的使用场景
        // 针对结果是boolean类型的判断
        //分支对应多个表达式的多个取值
        //switch的使用场景
        //针对结果是固定类型的判断
        //表达式的取值范围只是固定的离散值集合,分支对应表达式的某一种取值
    }
}

循环结构

和c语言基本上一样

注意点:

  • 增强形式的for循环
  • 循环跳转语句和标签
public class supplemnt {
    public static void main(String argc[]){
        //  增强形式的for循环
        //  定义一个数组
        int[] array = {1, 2, 3, 4};
        // 增强形式for循环
        for (int element : array){  //  只能从左到右遍历数组 无法灵活控制
            System.out.println(element);
        }

        // 跳转控制语句 break continue return
        // 默认情况下break只跳出一层循环
        // 终止任意层循环,需要再被终止的最外层循环的前面一句,打标签  break 标签  -》 标签:
        // coutinue 一般和if 一起使用。 continue 也可以+标签   等同于 break
        // return 退出当前方法(函数)
    }
}

代码规范

1.变量要描述清楚 用小写字母和下划线
2.一行代码不要太长
3.函数体前面空两行
4.每一个分支 或者循环语句 上下留一行 最内部的代码段不空行
5.带形参的函数都要写函数文本描述
6.# 注释在代码后面空两格 离注释语句空一个
7.不可混合缩进
8.代码格式统一
9.注释 描述功能
10.函数体短 好一些 利于顺应需求变更
11.readme 文档
12.按照团队代码规范写,便于共同开发
13.少定义全局变量
14.注释尽量写英文。层次有限就中文也可。
15.类名用大驼峰命名法 XiongZhiKang

如有错误之处,多多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值