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 <array.length ; 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

posted @ 2022-09-23 23:49  雨泽_mind  阅读(39)  评论(0)    收藏  举报