java基础知识汇总

Java入门与环境搭建

  1. java语言分类:j2se,j2me,j2ee,j2me->安卓

  2. Java跨平台性:一次编译,处处运行。因为每个操作系统都有jvm,平衡了操作之间的差异,可以运行.class文件

  3. 垃圾回收机制使程序员无法精确控制和干预

  4. Jdk和jre
    Jdk:Java开发工具包
    Jre:Java运行环境
    Jdk中包含jre。Jdk中bin文件夹下都是java命令,例如javac,java命令

  5. 程序安装
    建议安装目录不要有中文,空格,特殊字符(@,$),原因是当读文件的时候可能会发生转义找不到文件。例如空格会转义成

  6. java环境变量的配置

    JAVA_HOME,PATH
    JAVA_HOME是java安装路径
    PATH %JAVA_HOME%\bin
    Path这样做的好处是,万一JAVA_HOME路径发生改变,JAVA_HOME不是必须配置的。在web时,会用到这个变量
    上面的环境变量是针对某一用户的,下面的环境变量是针对系统的,系统有多少用户都可以使用

  7. Java开发步骤
    a) 编写.java文件
    b) 把.java文件编译成.class文件
    c) 运行.class文件java +文件名(不带后缀)

变量与运算符

  1. 合法标识符规则
    由26个英文字母大小写,数字:0-9 ,_或 $ 组成
    数字不可以开头。
    不可以使用关键字和保留字,但能包含关键字和保留字。
    Java中严格区分大小写,长度无限制。
    标识符不能包含空格

  2. Java中的名称命名规范
    包名:多单词组成时所有字母都小写:xxxyyyzzz
    类名接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
    变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz

  3. 变量分类
    成员变量,局部变量

  4. 数据类型
    基本数据类型(8种)和引用数据类型(3种)
    Byte short int long float double char blooen
    数组 类 接口
    数据类型转换,有小到大自动转,由大到小需强制
    Boolean不能和其他转换
    当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型

  5. 运算符
    /:取整
    %:取余
    ++,–运算
    =和==
    &&和||
    三元运算符

顺序结构及条件结构

  1. Scanner类
    Scanner sc = new Scanner(System.in);
    数据类型(引用数据类型,类类型) 变量名 = new +类名(System.in);
    sc.nextInt()可以从控制台接收一个int类型的变量
    sc.nextLine()可以从控制台接收一个String类型的变量

  2. 类的完整的名称:包名+类名
    使用包的原因:防止有重名的类和方便类的管理

  3. If语句
    If可以没有else
    If…else if…else,else if可以有多个else if后可以跟表达式

  4. Switch语句:
    a) switch里的表达式和case后的变量做比较,如果没找到合适的值,执行default语句

b) 2.找到合适的值,执行值对应的代码块。如果有break,则跳出。如果没有,继续往后执行
c) break不是必须的,案例见SwitchScore.java
d) switch表达式支持的数据类型:int, byte, char, short, 枚举, 字符串String

while do while

  1. If(布尔类型表达式)语句else if(布尔类型表达式),boolean类型的表达式:if(true)一般表达式不会直接写true,false,而是一个变量,或者通过比较运算符组成的条件,eg:a>0或者多个比较运算符组成的条件:eg:a>=0 && a<=100
    while(布尔类型表达式):while的表达式可以用true
    switch(表达式):byte,short,int,char,enum,String

  2. 运行方式
    如果是web项目,运行方式是run/debug on server
    如果一个类带有main方法,是可以使用java application运行的
    Run/debug:run可以直接运行出结果,debug可以关注中间过程。
    如果想关注代码的中间过程,例如某一行代码的变量的内容,在这行左侧蓝色区域双击,会出现一个“点”,叫断点。有了断点后,可以用debug->java application运行代码。入口是main方法,从main方法开始执行,一直运行到打断点的行暂定。你可以观察中间过程,按F6,按行执行代码。按F8,跳转到下一个断点。如果想让程序一直执行到结束,可以双击断点,把断点去掉。按F8,直到程序结束。
    点击java,回到java透视图

类和对象

  1. 成员变量 vs 局部变量
    相同点:
    a) 遵循变量声明或定义的格式: 数据类型 变量名 = 初始化值
    成员变量,可以不初始化。如果不初始化,当创建对象的时候系统初始化。
    局部变量必须显示的初始化
    b) 都有作用域
    成员变量作用域是类局部变量作用域是方法出了作用域,无法使用
    不同点:
    声明的位置的不同 :成员变量:声明在类里,方法外
    局部变量:声明在方法内,方法的形参部分,代码块内
    成员变量的修饰符有四个:public private protected 缺省(default),局部变量没有访问修饰符
    Private类型成员变量,在本类中可以访问,当brand改为public权限,可以访问

  2. 类的结构
    [< 修饰符>] class < 类名>
    {
    [<属性>]

    [<构造构造方法>]
    [<方法>]

    []表示可选

成员变量:

[<修饰符>] 类型 <属性名> [=初值] ;
变量必须先定义后使用
成员变量在对象创建的时候由系统初始化

方法:

<修饰符> <返回类型> <方法名>([< 参数表>]) {

[< 语句>]

}

  1. 对象的创建:
    使用构造方法创建:类型(类名) 对象名 = new 类名()
    通过对象调用成员变量或方法
    对象成员变量有什么用?记录对象成员变量的信息,不同对象表现不同。
    P1.name=”张三” p2.name=”李四”
    Car1.color=”red”,car2.color=”blue”

  2. 参数传递
    基本类型传值,对象类型传地址

封装

  1. 封装的好处:
    隐藏对象的成员变量
    成员变量的访问,通过get/set方法访问
    读写可分离,通过设置访问权限
    隐藏具体的实现细节

  2. Get/set方法命名规范
    get/set+成员变量
    方法名符合命名规范
    public int getAge(){
    return age;
    }
    public void setAge(int param)
    。。
    }

  3. 类中成员变量访问权限一般设置成private,通过get,set方法访问

  4. 构造方法
    生成对象,new+构造方法
    初始化成员变量
    构造方法名和类名相同,无返回值(对比普通方法定义)
    如果类中没有定义构造方法,系统提供无参的构造方法。如果定义了,都不提供
    Person2 p = new Person2();
    Date d = new Date();

  5. 构造方法重载
    方法名相同,参数列表(参数个数,参数类型)不同

  6. 构造方法初始化成员变量
    可以使用this.成员变量名来访问。如果成员变量名和构造方法形参名一样,必须使用this.成员变量名访问

  7. 构造方法之间的调用
    类有多个成员变量,,构造方法有重载。参数多的构造方法可以调用参数少的构造方法。可以使用this关键字调用参数少的方法。可以传参。This必须写在第一行

}

多态

  1. 表现:重载,重写
    优点:重载:同一个名字多个方法可以使用。不用再起另外的名字
    重写:子类对象可以表现为不同于父类的行为。通过声明为父类,定义为子类,少写很多代码

  2. 重载
    在同一类中。在不同类中方法名相同,参数列表不同不构成方法重载 方法名相同 参数列表不同:参数个数,参数类型不同
    系统会根据参数个数和类型自动匹配应该调用哪个方法
    只根据方法的返回值,无法判断方法重载:方法虽然有返回值,但是可以不接收
    java无法判断改掉用哪个方法

  3. 重写
    重写:父类方法满足不了子类要求
    返回类型相同
    方法名相同
    参数列表相同
    访问权限:不小于父类方法
    父类是default,子类可以是protected,public

  4. 重载和重写
    重载针对同一个类中不同的方法,方法名相同,参数列表不同
    重写:父类的方法满足不了子类要求,子类重写父类的方法,方法名,参数列表,返回类型都相同

  5. Final关键字
    Final修饰的类不能被继承,例如String
    Final修饰的方法不能被重写:
    Final修饰的基本数据类型变量,初始化不能被修改
    Final修饰引用数据类型变量,地址不能被修改,即不能把一个其他变量赋值给它。

  6. Static类型关键字
    可以修饰变量,也可修饰方法
    Static修饰变量,成为类变量。类变量中所有对象共享一套数据,类名.静态变量名
    Static修饰方法:所有对象共享,类名.静态方法
    在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。
    静态方法不能以任何方式引用this关键字。因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。
    main() 方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员。
    随着类的加载而加载,只加载一次
    类属性作为该类各个对象之间共享的变量。

抽象类和接口

  1. 抽象类
    类可以定义为抽象类
    有抽象方法的类都是抽象类
    抽象方法应用场景:方法的实现没想好, 无法统一子类的实现,如果父类中有抽象方法,子类不实现,子类必须为抽象类
    抽象类不能被实例化

  2. 抽象类不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法
    a.属性:Abstract只能修饰类,方法。属性(成员变量)都有具体的值。
    b.私有方法:如果能修饰,子类可以实现私有方法。私有方法只有本类能访问到,子类没有访问权限,既然不能访问就不能实现,子类必须定义为抽象类,子类继承类也必须是抽象类。子类中没有类能定义为非抽象类,无法用构造方法创建对象。
    c. 构造方法:构造方法特点:和本类类名相同。构造方法在子类中不能被重写。如果能够修饰构造方法,构造方法在父类中只有声明,需要在子类中重写。所有不能修饰,矛盾
    d. 静态方法:静态方法调用规则:类名.静态方法。如果能修饰,静态方法只能声明,不能有实现。矛盾
    e. Final:final修饰的方法,不能被重写。如果用abstract修饰,目的是让子类实现这个方法。又不能被重写,又要求实现,矛盾

  3. 接口应用场景:
    a).无法统一实现,即使实现了意义也不大1) 无法统一实现,即使实现了意义也不大
    b) .软件实现流程,详细设计阶段。统一类功能,方法名,返回,参数等信息

  4. 接口的特点:
    用 interface 来定义。
    接口中的所有成员变量都默认是由public static final修饰的。
    接口中的所有方法都默认是由public abstract修饰的。
    接口没有构造方法。
    实现接口的类必须提供接口中所有方法的具体实现内容。

  5. 抽象类VS接口
    相同点:
    i. 接口和抽象类都不能被实例化。只能被其他类实现和继承。
    ii. 接口和抽象类都可以包含抽象方法,实现接口和抽象类的类都必须实现这些抽象方法,否则实现的类就是抽象类。
    不同点:
    iii. 抽象类与接口定义不同:抽象类abstract class ,接口 interface
    iv. 接口里只能包含抽象方法,不包含已经实现的方法;抽象类则完全可以包含普通的方法。
    v. 接口里不能定义静态方法;抽象类可以定义静态方法
    vi. 接口里只能定义静态常量属性,不能定义普通属性;抽象类里既可以定义普通属性,也可以定义静态常量
    vii. 接口不包含构造函数;抽象类可以包含构造函数,抽象类里的构造函数并不是用于创建对象,而是让其子类调用这些构造函数来完成属于抽象类的初始化操作。
    viii. 一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java的单继承不足

数组

  1. 数组是存储同一数据类型多个元素的集合,int a[],Person [] p
    数组适用场景:集合,更适用于容器大小固定,不适用于对元素的增加,删除。
    数组一旦初始化,长度不可变

  2. 一维数组声明
    int a[];
    int[] a1;
    double b[];
    Date[]c;

  3. 数组初始化
    动态初始化:数据类型[] 数组名 = new 数据类型[数组长度];
    静态初始化:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};,可以简写为:数据类型[] 数组名 ={元素1,元素2,…}
    每个数组都有一个属性 length 指明它的长度
    数组元素的引用方式:数组名[数组元素下标]
    数组元素下标可以是整型常量或整型表达式
    数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 至 n-1

  4. 数组的异常信息:
    ArrayIndexOutOfBoundsException
    NullPointerException

  5. 数组的应用
    遍历,赋值,冒泡排序,传值和传址

  6. 二维数组
    一维数组中每个元素又都是数组
    二维数组访问,遍历,赋值

常用类

  1. Object类
    所有类的父类。Equals,toString方法默认实现。如果不满足子类需求,可以重写(多态)。
    ==和equals区别

  2. String类
    String不可变字符串。subString,trim,length,split

  3. StringBuffer
    可变字符串。字符串拼接频繁,次数较多。
    Append

  4. 包装类
    基本数据类型,只有int和char包装类特殊。
    Integer.parseInt()把字符串转换成int类型
    String.valueof()把数值型转换成String类型

  5. Date & DateFormat 类
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
    System.out.println(“使用sdf格式化:”+sdf.format(date));

反射

  1. 反射有什么好处 应用场景
    动态编译,需要什么加载什么
    只要知道类名,通过反射能知道类的所有内容。在修改成员变量值时,可以和业务无关
    例如:Student,知道成员变量,set方法修改成员变量的值,通过反射,只要知道类名即可知道类的相关信息,通过某种方式set值即可

  2. 反射
    操作类Class.forName(),数据库驱动加载
    反射操作构造方法:
    无参:获取类.newInstance
    有参:获取构造方法 构造方法.newInstance
    操作属性:获取类.getDeclaredField()
    操作方法:类.getDeclaredMethod,method.invoke
    Class c1 = Class.forName(“”);
    () p = c1.newInstance();
    Method m1 = c1.get(“”,返回类型.class)
    M1.invoke(p,chuzhi)

关于面向对象以及三大特征的解释
https://blog.csdn.net/weixin_37766296/article/details/80316284
java知识点汇总
https://blog.csdn.net/weixin_37766296/article/details/80467341

你可能感兴趣的:(java,基础)