• Java 学习笔记


    Java 语言

    计算机知识

    • 二进制

      位权 ... 16 8 4 2 1

      1 1 0 0=12

    • 字节

      位(bit),一个数字0或者一个数字1,代表一位。

      字节(Byte),每逢8位是一个字节,是数据存储的最小单位。

      1 Byte = 8 bit

      100Mbps /8 15MB/S

      1 KB = 1024 Byte

      1 MB = 1024 KB

      1 TB = 1024 GB

      1 PB = 1024 TB

      1 EB = 1024 PB

      1 ZB = 1024 EB

    命令提示符(command)

    • MS-DOS(Microsoft Disk Operating String)

    • 切换盘符 c: C:

    • 进入文件夹 cd 文件夹名称

    • 进入多级文件夹 cd 文件夹1\文件夹2\文件夹3

    • 返回上一级 cd ..

    • 直接回根路径 cd \

    • 产看当前文件夹 dir

    • 清屏 cls

    • 退出 exit

    • ipconfig

    • systeminfo

    • studown -s -t 3600 按秒计算

    • tree 树形列出文件夹结构

    win+r

    1. calc 计算器

    2. mspaint 画板

    3. notepad 记事本

    • 在指定文件夹中,通过在路径地址输入cmd可快速用命令符打开该文件。

    Java开发

    Java虚拟机--JVM

    • JVM(Java Virtual Machine) 核心

    • JRE(Java Runtime Environment)运行

    • JDK(Java Development Kit) 开发

    • JDK { 编译器等开发工具、JRE(运行类库、JVM)}

    public static void main (String[]args){

    }

    关键字

    1. 完全小写的字母

    2. 有特殊颜色的

    基本数据类型

    1. 整数型 byte short int long

    2. 浮点型 float double

    3. 字符型 char

    4. 布尔型 boolean

    引用数据类型

    • 字符串、数组、类、接口、Lambda

    注意事项

    1. 字符串不是基本类型,而是引用类型。

    2. 浮点型可能只是一个近似值,并非精确的值。

    3. 数据范围与字节不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是8字节。

    4. 浮点数当中默认类型是double,如果一定要使用float类型,需要加上一个后缀F。

    5. 如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L,推荐使用大写字母后缀。

    变量

    • 程序运行期间,内容可以发生改变的量。

    • 创建一个变量并且使用的格式:

      数据类型 变量名称;// 创建了一个变量

    • 变量名称 = 数据值; // 赋值,将右边的数据值,赋值交给左边的变量

    • 一步到位的格式: 数据类型 变量名称 = =数据值; // 在创建一个变量时,立刻放入指定的数据值。

     public class Demo01Variable () {
         public static void main (String[] args){
             //创建一个变量
             int num1;
             // 向变量当中存入一个数据
             num1 = 10;
             //打印输出变量
             System.out.println(num1);
             
             // 改边变量当中本来的数字,变成一个新的数字
             num1 = 20;
             System.out.println(num1);
             int num2 = 25;
             System.out.println(num2);
             
        }
     }
     

    使用变量的注意事项

    1. 如果创建多个变量,那么变量之间的名称不可以重复。

    2. 对于float和long类型来说,字母后缀F和L不要丢掉。

    3. 如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。

    4. 没有进行赋值的变量,不能直接使用,一定要赋值之后,才能使用。

    5. 变量使用不能超过作用域的范围。

    6. 可以通过一个语句来创建多个变量,但是一般情况不推荐这么写。

    数据类型转换

    • 当数据类型不一样时,将会发生数据类型转换。

    自动转换(隐式)

    1. 特点:代码不需要进行特殊处理,自动完成。

    2. 规则:数据范围从小到大

    强制类型转换(显式)

    1. 特点:代码需要进行特殊的格式处理,不能自动完成。

    2. 格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据。

    注意事项
    1. 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。

    2. byte、short、char这三种类型都可以发生数学运算,例如加法“+”。

    3. byte、short、char这三种类型在运算的时候,都会被首先提升成为int类型,然后计算。

    4. boolean类型不能发生数据类型转换。

    ASCII编码表

    1. 数字和字符对照关系表(编码表):

    2. ASCII码表:American Standard Code for Information Interchange 美国信息交换标准代码

    3. Unicode 码表:万国码,也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多的字符。

    48----“0”,65----“A”,97----“a”

    运算符

    算数运算符

    算数运算符包括: 
    +
    -
    *
    /
    取模(取余数) %
    自增自减 ++、--
    注意事项
    1. 一旦运算当中有不同类型的数据,那么将会是数据类型范围打的那种。

    2. 对于整数的除法来说,取模运算才有余数的意义。

    3. 在单独使用自增自减的时候,前++和后++没有任何区别。在混合使用的时候,有重大区别

      • 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。 【先加后用】

      • 如果是【后++】,那么首先使用变量本来的数值,然后【再让变量+1】。 【先用后加】

    赋值运算符

    赋值运算符包括:将右边的值赋给左边的变量
    = 等于号
    += 加等于
    -= 减等于
    *= 乘等于
    /= 除等于
    %= 取模等

    比较运算符

    比较运算符 
    == 两边数据是否相等,相等结果是true。
    < 左边是否小于右边,小则true
    > 是否左大于右,大则true
    <= 是否左边小于或者等于右边,如果小于则true
    >= 是否左边大于或者等于右边,如果大于则true
    != 如果不等于则true

    逻辑运算符

    比较运算符 
    与(并且) &&
    或(或者) ||
    非(取反) !
    • 短路:如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省了一定的性能。

    一元运算符

    • 只需要一个数据就可以进行操作的运算符。例如:取反!、自增++、自减--

    二元运算符

    • 需要两个数据才可以进行操作的运算符。例如:加法+、赋值=

    三元运算符

    • 需要三个数据才可以进行操作的运算符,三元运算符的结果必须被使用。

    • 格式:

       数据类型    变量名称 = 条件判断 表达式A : 表达式B;
    • 流程:

      首先判断条件是否成立:

      如果成立则为true,那么将表达式A的值赋值给左侧的变量

      如果不成立则false,那么将表达式B的值赋值给左侧的变量

     int a = 10;
     int b = 20;
     int max = a > b ? a : b;

    方法

    • 基本格式

       public static void 方法名称(){
       
       }
      1. 方法名称和变量的命名规则一样,小驼峰。

    switch

    注意事项:

    1. 多个case后面的数值不可以重复。

    2. switch 后面的小括号当中只能是下列数据类型:

      • 基本数据类型:byte、short、char、int

      • 引用数据类型:String字符串、enum枚举

    循环结构的基本组成部分:

    1. 初始化语句

    2. 条件判断

    3. 循环体

    4. 步进语句

    方法的重载

     

      • Overload,多个方法的名称一样,但是参数列表不一样。

      • 好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。

      • 方法重载与下列因素相关:

        1. 参数个数不同

        2. 参数类型不同

        3. 参数的多类型顺序不同

      • 方法重载与下列因素无关:

        1. 与参数的名称无关

        2. 与方法的返回值类型无关

    Java中的内存划分

    • Java的内存需要划分为5个部分:

      1. 栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。

        • 局部变量:方法的参数,或者是方法{}内部的变量。

        • 作用域:一旦超出作用域,立刻从栈内存当中消失。

      2. 堆(Heap):凡是new出来的东西,都在堆当中。

        • 堆内存里面的东西都有一个地址值:16进制

        • 堆内存里面的数据,都有默认值。规则:

          如果是整数 默认为0

          如果是浮点数 默认为0.0

          如果是字符 默认为‘\u0000’

          如果是布尔 默认为false

          如果是引用类型 默认为null

         

      3. 方法区(Method Area):存储.class相关信息,包含方法的信息。

      4. 本地方法栈(Native Method Stack):与操作系统相关。

      5. 寄存器(pc Register):与CPU相关。

     

    面向过程

    • 当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。(强调步骤)

       int [] array = {1,2,3,4,5,6};
              System.out.print("[");
              for (int i = 0; i < array.length; i++) {
                  if (i == array.length - 1 )
                      System.out.println("]");
                  else
                      System.out.print(array[i]+", ");
              }

       

    面向对象

    • 当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事。(强调对象)

      1. 使用面向对象

      2. 找一个JDK给我们提供好的Array类

      3. 其中有一个toString方法,直接就能把数组变成想要的格式的字符串

      int [] array = {1,2,3,4,5,6};
      System.out.println(Arrays.toString(array));

    特点

    • 面向对象思想是一种更符合我们思想习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者,面向对象的语言中,包含了三大基本特征,即封装、继承、多态。

    类与对象

    什么是类

    • 类:是一组相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征和行为来描述该类事物。

    • 属性:该事物的状态信息。

    • 行为:该事物能做什么。

    • 举例:小猫

      属性:名字、体重、年龄、颜色

      行为:走、跑、叫

    什么是对象

    • 对象:是一类事物的具体体现,对象是类的一个实例,必然具备该类事物的属性和行为。

    • 现实中,一类事物的一个实例:一只小猫

    类与对象的关系

    • 类是对一类事物的描述,是抽象

    • 对象是一类事物的实例,是具体

    • 类是对象的模板,对象是类的实体

    类的定义

    事物与类的对比

    成员变量:对应事物的属性

    成员方法:对应事物的行为

    类的定义格式

     public class Student {
      //成员变量
        private String name;
        private int age;
        //成员方法
        public void sleep(){
            System.out.println("睡觉觉!");
        }
        public void eat(){
            System.out.println("吃饭饭!");
        }
        public void study(){
            System.out.println("学习!");
        }
     }

    注意事项

    1. 成员变量是直接定义在类当中的,在方法外边。

    2. 成员方法不要写static关键字。

    使用

    • 通常情况下,一个类并不能直接使用,需要根据类创建一个对象,才能使用。

      1. 导包,也就是指出需要使用的类,在什么位置。

         import 包名称.类名称;
         import cn.edu.aku.demo.Student;

        对于和当前类属于同一个包的情况,可以省略导包语句不写。

         

      2. 创建,格式

         类名称 对象名 = new 类名称();
         Student stu = new Student();
      3. 使用,分为两种情况

        使用成员变量:对象名.成员变量名

        使用成员方法:对象名.成员方法名(参数)

    java中基本数据类型的默认值

    1、整数类型(byte、short、int、long)的基本类型变量的默认值为0。

    2、单精度浮点型(float)的基本类型变量的默认值为0.0f。

    3、双精度浮点型(double)的基本类型变量的默认值为0.0d。

    4、字符型(char)的基本类型变量的默认为 “/u0000”。

    5、布尔性的基本类型变量的默认值为 false。

    6、引用类型的变量是默认值为 null。

    7、数组引用类型的变量的默认值为 null。除关键数组变量的实例后,如果没有没有显示的为每个元素赋值,Java 就会把该数组的所有元素初始化为其相应类型的默认值。

    • 练习

       public class Phone {
          String brand;
          double price;
          String color;
          public void call(String who){
              System.out.println("给"+who+"打电话");
          }
          public void sendMessage(){
              System.out.println("群发短信");
          }
       }
       public class Demo03Phone {
          public static void main(String[] args) {
              Phone phone = new Phone();
              phone.brand = "华为";
              phone.price = 5999.6;
              phone.color = "白色";
              Phone phone2 = new Phone();
              phone2.brand = "小米";
              phone2.price = 3999.6;
              phone2.color = "黑色";
              System.out.println("第一部手机:"+phone.brand+","+phone.price+","+phone.color+"。");
              System.out.println("第二部手机:"+phone2.brand+","+phone2.price+","+phone2.color);
              phone.call("万仙山");
              phone.sendMessage();
                // 将 two 当中保存的对象地址值赋值给 three
              Phone three = two ;
          }
       }
       public class demo06PhoneParam {
          public static void main(String[] args) {
              Phone one = new Phone();
              one.brand = "华为";
              one.price = 5999.6;
              one.color = "白色";
              method(one);
          }
          public static void method(Phone param){
              System.out.println(param.brand);
              System.out.println(param.price);
              System.out.println(param.color);
          }
       }
       public class demo07PhoneReturn {
          public static void main(String[] args) {
              Phone two = getPhone();
              System.out.println(two.brand+","+two.price+","+two.color);
          }
          public static Phone getPhone(){
              Phone one = new Phone();
              one.brand = "华为";
              one.price = 5999.6;
              one.color = "白色";
              return one;
          }
       }

       

    局部变量和成员变量

    1. 定义的位置不一样

      局部变量:在方法的内部

      成员变量:在方法的外部,直接写在类当中

    2. 作用范围不一样

      局部变量:只有方法当中才可以使用,出了方法就不能再用

      成员变量:整个类全都可以使用

    3. 默认值不一样

      局部变量:没有默认值,如果要想使用,必须手动进行赋值

      成员变量:如果没有赋值,会有默认值,规则和数组一样

       public class demo08VariableDifference {
          String name;
          public void methodA(){
              int num = 20;
              System.out.println(num);
              System.out.println(name);
          }
          public void methodB(int param){ // 方法的参数就是局部变量
              // 参数在方法调用时,必然会被赋值的。
              System.out.println(param);
              int age;
       //       System.out.println(age);   // 没赋值不能用
       //       System.out.println(num); // 错误写法
              System.out.println(name);
          }
       }
    4. 内存的位置不一样

      局部变量:位于栈内存

      成员变量:位于堆内存

    5. 生命周期不一样

      局部变量:随着方法进栈而诞生,随着方法出栈而消失。

      成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。

    封装

    • 封装性在Java中体现

      1. 方法就是一种封装

      2. 关键字private也是一种封装

     public class demo01Method {
        public static void main(String[] args) {
            int [] array = {5,15,20,25,300,10};
            int max = getMax(array);
            System.out.println("最大值:"+max);
     
        }
        public static int getMax(int [] array){
            int max = array[0];
            for (int i = 1; i             if (array[i] > max)
                    max = array[i];
            }
            return max;
        }
     }

    封装就是将一些细节信息隐藏起来,对于外界不可见。

    • private的使用 (提高代码的安全性)

     /**
      * @desciption: 问题描述:定义Person 的年龄时,无法阻止 不合理的数值设置进来。
      * 解决方法 : 用 private 关键字 将需要保护的成员变量进行修饰
      *         一旦使用了 private 进行修饰,那么本类当中仍然可以随意访问
      *         但是! 超出了本类 范围之外就不能直接在访问了
      *
      *         间接访问 private 成员变量,就是定义一对儿 Getter和 Setter 方法
      *
      *         对于Getter 来说,不能有参数,返回这类型 和成员变量对应
      *         对于Setter 来说,不能有返回值,参数类型 和成员变量对应
      */
      class Person {
          String name;
          private int age;
     //   获取age数据
        public int getAge() {
            return age;
        }
        // 设置age数据
        public void setAge(int num) {
            if (num >= 0 && num < 100){
                age = num;
            }
        }
     
        public void show(){
            System.out.format("我叫%s,年龄%d",name,age);
        }
     
     }
     
     public class demo02Person {
        public static void main(String[] args) {
            Person person = new Person();
            person.show();
            System.out.println();
            person.name = "赵丽颖";
     //       person.age = -18;   // 直接访问 private 内容,错误写法!
            person.setAge(18);
            person.show();
        }
     }
     
    • 对于基本类型当中的Boolean值,Getter方法一定要写成isXxx的形式,而setXxx规则不变。

    this关键字的作用

    1. 当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。

    2. 如果需要访问本类当中的成员变量,需要使用格式:

      this.成员变量名。

       public  void  sayHelloNoThis(String name){
       System.out.println(name+"你好,我是"+name);
       }
       public void sayHello(String name){
       System.out.println(this.name+"你好,我是"+name);
       }
       person.name = "王思聪";
       person.sayHelloNoThis("王健林");
       person.sayHello("王健林");
       打印结果:
       王健林你好,我是王健林
       王思聪你好,我是王健林
       

    构造方法

    • 构造方法是专门用来创建对象的方法,当我们通过关键字new 来创建对象时,其实就是在调用构造方法。

    • 格式:

       

       public 类名称(参数类型 参数名称){
        方法体
       }

       

    • 注意事项:

      1. 构造方法的名称必须和所在的类名完全一样,就连大小写也要一样。

      2. 构造方法不要写返回值类型,连 void 都不写。

      3. 构造方法不能return一个具体的返回值

      4. 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数、方法体什么事情都不用做。

        public Student(){}

      5. 一旦编写了至少一个构造方法,那么编译器将不再赠送。

         

    定义一个标准的类

    一个标准的类通常要拥有下面四个组成部分: 1.所有的成员变量都要使用private关键字修饰 2.为每一个成员变量编写一 对儿Getter/Setter方法 3.编写一个无参数的构造方法 4.编写一个全参数的构造方法 这样标准的类也叫做 Java Bean

    API

    概述

    API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的字典,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。

    文档地址:下载:https://wwp.lanzouy.com/iruoA0fby0hi 密码:ghrq

    Scanner类

    • Scanner 类的功能:可以实现键盘输入数据,到程序当中。

    引用类型的一般使用步骤:

    1. 导包

      import 包路径.类名称;

      如果需要使用的目标类,和当前类位于同一个包下,则可以省略导包语句不写。(只有java.lang包下的内容不需要导包,其他的包都需要import语句)

    2. 创建

      类名称 对象名 = new 类名称();

    3. 使用

      对象名.成员方法名();

       

     import java.util.Scanner;
      Scanner sc = new Scanner(System.in);
            int num = sc.nextInt();
            String str = sc.next();
     // 其实从键盘输入的都是字符串,而 nextInt() 是把输入的字符串转化成数值

     

     public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        System.out.println(maxNum(a,b,c));
     
     }
     public static int maxNum(int a, int b, int c){
        int max = a > b ? a : b;
        return max > c ? max : c;
     }

    匿名对象

    • 匿名对象就是只有右边的对象,没有左边的名字和赋值运算符。

      new 类名称();

    • 注意事项:匿名对象只能使用唯一的一次,下次再用不得不再创建一个新对象。

    • 使用建议:如果确定有一个对象只需要使用唯一的一次,就可以用匿名对象。

        

    public class demo06Anonymous {
    public static void main(String[] args) {
    // 普通使用方式
    // Scanner sc = new Scanner(System.in);
    // int num = sc.nextInt();
    // 匿名对象的方式
    // int num = new Scanner(System.in).nextInt();
    // System.out.println("输入的是:"+num);
    // 使用一般写法传入参数
    // Scanner sc = new Scanner(System.in);
    // methodParam(sc);
    // 使用匿名对象来进行传参
    // methodParam(new Scanner(System.in));
    Scanner sc = methodScanner();
    int num = sc.nextInt();
    System.out.println("输入的是:"+num);
    }
    public static void methodParam(Scanner sc){
    int num = sc.nextInt();
    System.out.println("输入的是:"+num);
    }
    public static Scanner methodScanner(){
    return new Scanner(System.in);
    }
    }

         

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    • #end

  • 相关阅读:
    新华三的千亿企业梦,还得靠吃ICT老本来实现?
    开会总结【1】ADL129
    【ACWing】139. 回文子串的最大长度
    SPI配置
    【LeetCode】232.用栈实现队列
    【单细胞高级绘图】10.KEGG富集结果的圆圈图
    Flink 检查点(Checkpoint)
    大模型应用开发:为产品创建一个AI客服/智能助手
    解决问题:已通过系统pip安装了相应模块,但是PyCharm中却提示 No module named xxxx
    Oracle网络原理及配置
  • 原文地址:https://www.cnblogs.com/Lvrain/p/16724704.html