记录一个学渣从新开始学习java的笔记(不定时更新)

记录一下自己复习java的笔记

由于自己有一定的学习基础,所以笔记不会太过详细,主要记录自己容易忘记的知识点以及难点,这里用的编辑器是IDEA。

面向对象的三大特征

  1. 封装:是面向对象编程语言对客观事物的模拟,客观事物里成员变量都是隐藏在对象内部的,外界是无法直接操作的。

封装原则:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法。

好处:通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码的复用性。

  1. 继承:是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。(父类也被称为基类,超类。子类也被称为派生类)

    public class 子类名 extends 父类名{}

    好处:提高了代码的复用性

    提高了代码的维护性

    弊端:继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性。

    注意事项:java中类只支持单继承,不支持多继承

    java中类支持多层继承

    注:

    1. 变量名相同时,访问的是子类变量,可用关键字 super.变量名 访问父类中的名字相同的变量

    2. 子类中所有的构造方法默认都会访问父类中无参的构造方法。(因为子类会继承父类中的数据,可能还会使用父类的数据,所以子类初始化之前,一定要完成父类的初始化,另外每一个子类构造方法的第一条语句默认都是:super())

注释

书写注释是一个非常好的习惯,注释是不会被执行的,java中注释有三种。

  1. 单行注释 即注释一行,例:

     //单行注释
     System.out.println("Hello World");//单行注释
  2. 多行注释

     /*
      多行
      注释
      */
  3. 文档注释

 /*
 *了解即可
 * */

标识符

 

 

 

 

 

 

 

关键字

private

private是一个权限修饰符,可以修饰成员(成员变量和成员方法)

作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问

对于private修饰的成员变量,如果需要被其他类使用需提供相应的操作如:

  1. 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰。

  2. 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰。

this

this修饰的变量用于指代成员变量,方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量。

方法的形参没有与成员变量同名,可以不用this修饰。

注:方法被哪个对象调用,this就代表哪个对象。

 

修饰符

 

 

 

状态修饰符

  1. final (最终态)可以修饰成员变量,成员方法,类

特点:

修饰方法:表明该方法是最终方法,不能被重写

修饰变量:表明该变量是常量,不能再次被赋值

修饰类:表明该类是最终类,不能被继承

final修饰局部变量

(1)边量是基本类型:final修饰指的是基本类型的数据值不能发生改变

(2)变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的

  1. static(静态)可以修饰成员方法,成员变量

  2. 特点

    被类的所有对象共享

    可以通过类名调用,也可以通过对象名调用,推荐使用类名调用

    静态成员方法只能访问静态成员

数据类型

 

浮点数(double,float)不能表示精确的数值,不能用于比较和表示货币等,最好完全避免浮点数进行比较;

转义字符:image-20200612110655896

强制转换,自动转换

注意溢出,精度问题,不能把对象类型转换为不相干的类型。

变量

数据类型 变量名[=范围];

[]里面的内容可以不写,则数值变量默认赋值为0,字符类型默认初始值为null,boolean默认是false,除了基本变量默认初始值均为null。

每个变量都有类型,类型可以是基本类型,也可以是引用类型。

变量名必须是合法的标识符。

变量声明是一条完整的语句,所以必须以分号结尾。

注意作用域:实例变量(全局变量),局部变量必须赋初始值,类变量(静态变量static)。

成员变量:类中方法外定义的变量

局部变量:方法内定义的变量

区别:

  1. 成员变量在堆内存中,局部变量在栈内存中

  2. 成员变量随着对象的存在而存在,随着对象的消失而消失,局部变量随着方法的调用而存在,随着方法的调用完毕而消失。

  3. 成员变量有默认的初始化值,局部变量没有默认的初始化值,必须先定义,赋值,才能使用。

常量

一旦定义后,就不会改动的值。

final 常量名=值;

常量名一般使用大写字符。

变量命名规范

所有变量,方法,类名:要求见名知意。

类成员变量:首字母小写,驼峰原则即除了第一个单词以外,后面的单词首字母均大写。lastName。

局部变量:首字母小写和驼峰原则。

常量:大写字母和下划线,MAX_VALUE

类名:首字母大写,驼峰原则,Man,GoodMan

方法名:首字母小写和驼峰原则。

运算符

image-20200613085110191

包机制

用于区别类名的命名空间。(可以理解为文件夹)

作用:对类进行分类管理

语法:package pkg1[.pkg2[.pkg3...]];该语句必须放在最开头。

一般利用公司域名倒置作为包名。

在java程序中导入某包。使用“import”语句。

import package1[.package2...].(classname|*);

注:修饰符不存在先后顺序。

javaDoc

javaDoc命令是用来生成自己的API文档的

参数信息

  1. @author 作者名

  2. @version 版本号

  3. @since 指明需要最低JDK版本

  4. @param 参数名

  5. @return 返回值

  6. @throws 抛出的异常情况

    例:

     /**
      * @author 小朋友
      * @since 1.8
      */
     public class ForExample {
         public static void main(String[] args) {
     ​
             int a=0;
     ​
        }
     ​
         /**
          *
          * @param name
          * @return
          * @throws Exception
          */
         public   String  writer(String name)throws Exception
        {
             return name;
        }
     }

可以生成帮助文档

步骤

  1. 打开命令行窗口

  2. 进入所需生成文档的路径

  3. 输入 javadoc -encoding UTF-8 -charset UTF-8 所有生成帮助文档的文件名加后缀

  4. 回车

image-20200613103822048

scanner对象

可通过Scanner类来获取用户的输入

基本语法 Scanner s =new Scanner(System.in);

通过Scanner类的next()和nextLine()方法获取输入的字符串,用hasNext()与hasNextLine()方法判断是否还有输入的数据

例:

 public class demo_1 {
     public static void main(String[] args) {
         Scanner scanner = new Scanner(System.in);
         System.out.println("使用next和nextLine方法接收:");
 //       if(scanner.hasNext())//判断是否有字符串输入
 //       {
 //           String str=scanner.next();//只能接收单个字符串
 //           System.out.println("接收到字符串:"+str);
 //       }
         if(scanner.hasNextLine())
        {
             String str=scanner.nextLine();//可以接收一行字符串
             System.out.println("接收到字符串:"+str);//输出
        }
 ​
 ​
    }
 }

结构

  1. 顺序结构

  2. 选择结构 if-else switch 语句

    case穿透:case语句后面如果不加breakj结束循环将继续执行下一个case(不会再进行判断)后面的语句,直到遇到break或者语句最后才结束。

  3. 循环结构 while循环, for循环,do—while循环,continue结束本次循环,break结束循环,嵌套循环。

 

javaAPI

指的是JDK中提供的各种功能的java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。可以通过帮助文档来学习这些API如何使用。

String类

String类在java.lang包下,所以使用的时候不需要导包。

String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。也就是说java程序中所有的双引号字符串,都是String类的对象。

特点

字符串不变; 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。

String对象是不可变的,但是它们可以被共享。

字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])

通过new创建的字符串对象,每次new都会申请一个内存空间,即使内容相同,但是地址值不同。

以“”方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。

有关方法

  1. a.equals(b) 比较字符串a和b的内容是否相等 返回值为boolean类型

  2. a.length() 返回字符串a的字符长度 返回值为int类型

  3. a.charAt(int i) 获取指定位置上的char值 返回值为char类型

StringBuilder

StringBuilder是一个可变的字符串类,可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的。

StringBuilder append(任意类型) 添加数据,并返回对象本身

StringBuilder reverse() 返回相反的字符序列

这两个方法String是没有的,所以出现了二者的相互转换

StringBuilder转换为String

String toString() 通过toString()就可以实现把StringBuilder转换为String

String转换为StringBuilder

StringBuilder(String s) 通过构造方法就可以实现把String转换为StringBuilder类。

Random类

简单来说就是产生随机数的一个类

  1. 导包 import java.util.Random

  2. Random r=new Random();

  3. int i=r.nextInt(10);//获取[0,10)的整数。

java中的内存分配

栈内存

存储局部变量

定义在方法中的变量,使用完毕后立即消失。

堆内存

存储new出来的内容(实体,对象)数组在初始化时,会为存储空间添加默认值。

每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收。

数组

数组动态初始化 例:int []arr=new int[3];

数组静态初始化 例: int []arr={1,2,3};

常见小问题

  1. 索引越界

    访问了数组中不存在的索引对应的元素,造成索引越界问题。

  2. 空指针异常

    访问的数组已经不再指向堆内存的数据,造成空指针异常。

集合

集合是提供一种存储空间可变的存储模型,存储的数据容量可以发生改变。集合类有很多,先学习第一个:ArrayList

ArrayList<E> 可调整大小的数组实现,<E>是一种特殊的数据类型,泛型。

在出现E的地方我们使用引用数据类型替换即可。

ArrayList部分方法

  1. ArrayList() 创建一个空的集合对象

  2. boolean add(E e) 将指定的元素追加到此集合的末尾

  3. void add(int index,E element) 在此集合中指定位置插入指定的元素

  4. boolean remove(Object o) 删除指定的元素,返回删除是否成功

  5. E remove(int index) 删除指定索引处的元素,返回被删除的元素。

  6. E set(int index,E element) 修改指定索引处的元素,返回被修改的元素

  7. E get(int index) 返回指定索引处的元素

  8. int size() 返回集合中的元素的个数

 

 

方法

定义

具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。

注意

  1. 方法必须先创建才可以使用该过程称为方法定义。

  2. 方法创建后并不是直接运行的,需要手动创建使用后才执行,该过程称为方法调用。

  3. 带返回值定义的方法return后面的返回值与方法定义上的数据类型要匹配。

  4. 方法的返回值通常会使用变量接收,否则该返回值将无意义。

  5. 方法不能嵌套定义

  6. void表示无返回值,可以省略return,也可以写reruen;

  7. 方法参数传递 对于基本类型的参数,形式参数的改变,不影响实际参数的值,但是对于引用类型的参数,形式参数的改变,影响实际参数的值。(基本类型传递的值,引用类型传递的是地址)

带参数方法定义

public static void 方法名(数据类型 变量名1,数据类型 变量名1...){方法体}

方法调用时,参数的数量与类型必须与方法定义中的设置相匹配。

形参和实参

形参:方法定义中的参数等同于变量定义格式例如:int number

实参: 方法调用中的参数,等同于使用变量或者常量。例如:10,number

方法重载

方法重载指的是同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载。

  1. 多个方法在同一个类中

  2. 多个方法具有相同的方法名、

  3. 多个方法的参数不相同,类型不同或者数量不同

不能通过返回值来判断两个方法是否相互构成重载。

方法重写

概述:子类中出现了和父类中一样的方法声明

应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容 注意事项:1. 私有方法不能被重写(父类私有成员子类是不能继承的)

  1. 子类方法访问权限不能更低(public>默认>私有)

构造方法

是一种特殊的方法主要是完成对象数据的初始化。

如果没有定义构造方法,系统将给出一个默认的无参构造方法

如果定义了构造方法,系统将不再提供默认的构造方法,若已经定义了带参构造方法,还要使用无参构造方法。就必须再写一个无参构造方法。

注:构造方法无返回值 例:public 类名(){}

Debug

概述:

Debug是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。

  1. 加断点:选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可。

  2. 运行断点:在代码区域右键,点击Debug执行。

  3. 观察Debugger窗口以及Console窗口。

  4. 点Step Into或者快捷键F7执行下一步

  5. 结束:点击窗口的Stop结束

  6. 删除断点:选择要删除的断点,单击鼠标左键即可。

注意事项:如果数据来自于键盘输入,一定要记住输入数据,否则就不能继续执行。

类

类是对现实生活中一类具有共同属性和行为的事务的抽象,确定对象将会拥有的属性和行为。类是java程序的基本组成单位。

类的组成

  1. 属性:在类中通过成员变量来体现(类中方法外的变量)

  2. 行为:在类中通过成员方法来体现

特点

类是对象的数据类型

类是具有相同属性和行为的一组对象的集合

对象:是能够看得到摸得着的真实存在的实体

类是对象的抽象

对象是类的实体

对象的属性:对象具有的各种特征,每个对象的每个属性都具有特点的值

对象的行为:对象能够执行的操作

注:一个类的多个对象的成员变量是不同的,但可以共用方法。

抽象类

在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类

多态

概述:同一个对象在不同时刻表现出来的不同形态

多态的前提和体现

  1. 有继承/实现关系

  2. 有方法重写

  3. 有父类引用指向子类对象

    多态中成员访问特点

    1. 成员变量:编译看左面,执行看左边

    2. 成员方法:编译看左面,执行看右边

      (因为成员方法有重写,而成员变量没有)

      好处和弊端

      1. 好处:提高了程序的扩展性(具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候使用具体的子类型参与操作)

      2. 弊端:不能使用子类的特有功能

    转型

    1. 向上转型

      从子到父 父类引用指向子类对象 (例: fu f=new zi())

    2. 向下转型

      从父到子 父类引用转为子类对象(例: zi z=(zi)f)

因为未保存,丢失部分笔记,包括接口,继承,内部类等。

匿名内部类:

前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。

本质:是一个继承了该类或者实现了该接口的子类匿名对象

格式:

new 类名或接口名(){重写方法;};

基本类型包装类

概述:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

常用的操作之一:用于基本数据类型与字符串之间的转换

image-20200805081325170

Integer:包装一个对象中的原始类型int的值

image-20200805083638358

int和String的相互转换

基本类型包装类的最常见操作就是:用于基本类型和字符串之间的相互转换

  1. int转换为String

    public static String valueOf(int i); 返回int参数的字符串表示形式。该方法是String类中的方法。

  2. Sting转换为int

    public static int parseint(String s):将字符串解析为int类型,该方法是Integer类中的方法。

自动装箱和拆箱

装箱:把基本数据类型转换为对应的包装类类型

拆箱:把包装类类型转换为对应的基本数据类型

image-20200805094517726

Data类

Data代表了一个特定的时间,精确到毫秒。

image-20200805100918423

常用方法:

image-20200805101223139

 

SimpleDateFormat类

概述:SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

image-20200805162802426

构造方法:

image-20200805162837182

Calendar类

常用方法:

image-20200806102711657

注:一个类的多个对象的成员变量是不同的,但可以共用方法。

异常

概述:就是程序出现了不正常的情况。

image-20200806164513202

Error:严重问题,不需要处理。

Exception:称为异常类,它表示程序本身可以处理的问题。

RuntimeException:在编译期是不检查的,出现问题后,需要回来改代码

非RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了。

对于异常 JVM的默认处理方案

如果程序出现了问题,我们没有在任何处理,最终JVM会做默认的处理

  1. 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台

  2. 程序终止运行

异常处理之cry...catch...

格式:

try{

可能出现异常的代码;

}catch(异常类名 变量名){

异常的处理代码;

}

执行流程:

程序从cry里面的代码开始执行,出现异常后会自动生成一个异常类对象,该异常类对象将被提交给java运行时系统,当java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理,执行完毕后,程序还可以继续向下执行。

Throwable的成员方法

注:Throwable是所有错误和异常的祖宗类。

image-20200806170715492

编译时异常和运行时异常的区别

java中的异常被分为两大类;编译时异常和运行时异常,也被称为受检异常和非受检异常,所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常

  1. 编译时异常:必须显示处理,否则程序就会发生错误,无法通过编译

  2. 运行时异常:无需显示处理,也可以和编译时异常一样处理

异常处理之throws

并不是所有的情况我们都有权限进行异常的处理,也就是说可能出现的异常我们是处理不了的,针对这种情况java提供了throw的处理方案。

格式:

方法名() throw 异常类名

注:

  1. 编译时异常必须要进行处理,两种处理方案:try...catch...或者throws,如果采用throws这种方案,将来谁调用谁处理

  2. 运行时异常可以不处理,出现问题后,需要我们回来修改代码

自定义异常

格式:

public class 异常类名 extends Exception{

无参构造

带参构造

}

示例:

 public class ScoreException extends Exception{
     public ScoreException(){};
     public ScoreException(String string){
         super(string);
    }
 ​
 }

杂

使用==做比较

对于基本类型:比较的是数据值是否相同。

对于引用类型:比较的是地址值是否相同。

 

 

 

狂神说JavaJava零基础学习视频通俗易懂

posted @ 2020-08-02 16:57  腐朽的果实  阅读(122)  评论(0)    收藏  举报