zoukankan      html  css  js  c++  java
  • Java 语言基础知识

    1、java 发展历程

    1998年,Sun 公司发布 jdk1.2 ,该版本将 java 分为 J2SE、J2EE、J2ME 三类。

    2014年,Sun公司发布 jdk1.8

    2、一次编译,各处运行

    先编译成 .class文件,再解释执行。

    3、基本数据类型与表达式

    文字量:文字量直接出现在程序中并被编译器直接使用,如 30.

    标识符:标识符是一个名称,以字母或下划线或美元符号开头。

    变量:一个由标识符表示的项,变量的值可以被改变。

    内置数据类型

    • byte

    • short

    • int

    • long

    • float

    • double

    • boolean : 表示一个逻辑量,仅有两个取值:true或false

    字符型

    字符串:java的基本数据类型没有字符串类型,在java 中使用 String 类来定义字符串。如 String s = "hello".

    运算符:算术运算符、赋值运算符、关系运算符、逻辑运算符、条件运算符(三目运算符)。

    类型转换

    • 扩展转换:从低位向高位转换

    • 窄化转换:从高位向低位转换

    • 隐含转换:有赋值转换、方法调用转换、字符串转换三种

    • 显式转换:强制类型转换

    4、数组

    数组的概念:由同一类型的对象或数据构成,并封装在同一标识符下。

    在 Java 中数组是对象,需要动态初始化。,可以赋值给 Object 类型的变量,数组中的变量称为数组元素

    数组的创建与使用

    数组引用的声明:如int[] name 或 int name[] ,两者是等效的。

    数组的创建:

    用关键字 new 构成数组的创建方式。

    创建实例:

    int[] ai;
    ai = new int[10];
    

    数组初始化:

    int[] a = {1,2,3,4,5};
    

    使用数组:使用 arrayName[index],可以通过 arrayName.length() 获得数组长度。

    数组名只是一个引用

    复制数组元素使用 System.arrayCopy() 方法

    多维数组

    定义二维数组的方式如下:

    1、int[][] myArray;

    2、int[][] myArray = new int[3][5]

    3、int[][] myArray = {(1,2,3),(2,3,1,)}

    java 里面二维数组的长度指的是它的行数

    java 里面的二维数组就是由一维数组构成的数组。

    5、算法的流程控制

    if 语句:1、只有 if 语句;2、单个 if-else 结构;3、多个 if-else 结构

    简单的 if-else 语句可以使用条件语句来替换。

    switch 语句

    for 语句:是 Java 三个循环语句中功能最强大的一个,使用最广泛的一个。

    增强 for 循环:用来针对数组或集合对象进行遍历。

    语法格式:

    for(Type name: 数组或集合类型对象){
          //循环体;
    }
    

    while: 先判断再循环

    do-while:先循环再判断

    break 语句:跳出循环,不再执行剩余部分。

    continue 语句:停止本次循环,开始下一次循环。

    6、类的声明与对象的创建

    类是对一类对象的描述,对象是类的具体实例。

    class:表示这是一个类

    extends: 继承的关键字

    implements: 实现接口的关键字

    public:公有类

    对象引用声明

    7、在类里面声明数据成员

    数据成员:表示对象的状态。

    如:

    public static int a; // 这是一个类变量
    public String s;
    
    • static 指明这是一个类变量(静态成员变量),在类初始化时就被同时赋值。

    • final 指明这是一个不可被修改的量

    实例变量:没有static修饰的变量,存储所有实例都需要的属性。

    8、在类中定义方法成员

    类中的方法分为:1、类方法;2、实例方法

    返回类型

    参数类型

    方法体

    实例方法:用来表示每个对象的功能或行为

    实例方法的调用格式:

    <对象名>.<方法名>(实参列表)
    

    参数传递

    • 值传递: 参数类型为基本数据类型时

    • 引用传递:参数类型为对象或数组时

    类方法(静态方法)

    • 声明时需要使用 static 关键字修饰

    • 不能被声明为抽象的

    • 可以类名直接调用,也可以使用实例调用

    可变长参数

    使用三个省略号表示,其实质就是数组

    String... s,相当于 String[] s

    9、包

    包的作用

    • 将相关的源代码文件组织在一起

    • 类名的空间管理,用来避免命名冲突的问题。

    • java 中包名使用小写字母表示

    • 建议使用公司域名的反序作为包名,如com.google

    包的声明: 如,package 包名

    包的引入

    使用 import 语句引入所需的包, java 编译器为所有程序自动引入包 java.lang

    静态引入

    • 单一引入:引入某一个指定的静态成员。

    • 全体引入:引入所有的静态成员。

    10、类的访问控制权限

    private:只能被同一类中访问

    public: 可以被不同包,不同父类的访问

    get方法:获取属性变量的值

    set方法:修改属性变量的值

    this关键字

    11、对象初始化

    使用构造方法对对象进行初始化。

    构造方法

    • 方法名与类名相同

    • 不定义返回类型

    • 通常被定义为 public (公有的)

    • 可以有任意多个参数

    • 主要作用是完成对象的初始化工作

    • 在生成一个对象时,自动调用构造方法来对新对象进行初始化

    默认构造方法

    • 没有参数(内部类除外)

    • 对象的属性值默认为零或空

    自定义构造方法与方法重载

    • 在生成一个对象时,给构造方法传送初始值,为对象进行初始化

    • 构造方法可以被重载:通过参数列表来比对,调用不同的构造方法

    • 只要显式的声明了一个构造方法,就不再使用默认的构造方法。

    final变量的初始化

    • 实例变量和类变量都可以被声明为final

    • final实例变量可以在类中定义时给出初始值。

    12、内存回收

    对象的自动回收

    • 无用对象:离开了作用域的对象,无引用指向的对象

    finalize()方法:

    • 在类java.lang.Object中声明,因此,java的每个类都有这个方法。

    • 用于释放资源

    • 类可以重写finalize()方法

    • finalize()方法可能以任何的次序执行

    13、应用实例

    一个银行账户的实例。

    DecimalFormat类:该类位于 java.text 包下,作用是将输出数据进行格式化。

    14、类的继承的概念和语法

    类继承的概念

    • java 只支持单继承,每个子类只能有一个超类(父类)

    • 超类是所有子类的共有属性及方法的集合,子类则是超类的特殊化

    • 继承可以提高代码的可重用性

    子类对象:包含着超类的所有属性和方法,以及子类特有的方法

    继承的语法,如下:

    pubilc class Son extends Father{
    }
    

    父类中的私有变量被继承到子类后,是不能被直接访问的,除非父类中有访问该私有变量的方法。

    15、隐藏和覆盖

    也就是重写 @override

    属性的隐藏:子类中声明了与超类中相同的成员变量名

    • 从超类中继承的变量将被隐藏

    • 当子类执行继承自超类的操作时,处理的是继承自超类的变量,反之则是处理的是子类的变量。

    访问被隐藏的超类属性

    • 调用从超类继承的方法,则操作的是从超类继承的属性

    • 使用关键字 super,来访问超类中的属性。

    • 静态成员不被继承,不属于任何一个对象,但可以被所有子类访问

    必须被重写的方法:派生类必须重写基类中的抽象方法

    ****:被 final、static 修饰的方法不能被重写

    16、Object 类

    Object 类是其他所有类的直接或间接超类。

    Object 类的主要方法

    • getclass() :获取当前对象所属的类信息

    • toString():

    ...

    相等与同一

    • 两个对象具有相同的类型,及相同的属性值,则称两者相等。

    • 如果两个引用变量指向同一个对象,则两个引用同一。

    hashCode() 方法: 返回对象的散列码

    如果依据 equals()方法两个对象相等,则两个对象的散列码应该是相同的。

    clone()方法:使用 clone 方法复制对象。

    finalize() 方法: 在对象被垃圾回收器回收之前,系统自动调用对象的 finalize 方法。

    getClass( 方法):返回一个 class 对象,用来代表对象所属的类。

    notify、notifyAll:与线程有关的方法

    17.接口

    接口不规定方法的主体;接口中可以有数据成员,但默认是 static 或 final 类型。

    接口的作用

    • 继承多个设计

    • 建立类与类之间的“协议”

    • 在不同类之间实现常量的共享

    接口的语法

    public interface 接口名 {
     // 方法的原型或静态变量
    }
    

    接口中的方法,默认是 abstract 或者 final 。

    接口不能被实例化,只能被实现。且接口可以被多重继承。

    实现接口

    如:

    public class 类名称 implements 接口名1,接口名2{
     // 重写接口中的方法。
    }
    

    接口的扩展:接口与接口之间,也可以继承,有超接口与子接口之分。

    如:

    interface 子接口 extends 父接口{
     // 
    }
    

    18、类型转换

    类型转换规则

    • 基本类型转换: 将一个值转换成另一个值

    • 引用类型转转:引用之间的转换必须有继承关系或者接口的实现关系,将引用转换为另一个类型的引用,并不改变对象本身的类型

    • 当一个引用被转换为超类的引用后,通过它能够访问的服务接口只能是超类中有的方法。

    隐式类型的转换

    • 基本类型转换:自动将低位转换为高位

    • 引用变量:被转换成更一般的类,如将子类的引用转换成超类的引用。或转换成更一般的接口。

    显式类型的转换

    • 基本数据类型:高位转换为低位

    • 引用变量:将超类的引用转转为子类的引用。

    类型转换的应用场合

    • 赋值转换:两个不同类型进行赋值需要进行转换

    • 方法调用转换:将实参的类型转换为形参的类型

    • 算术表达式转换:将不同类型转换成相同类型再计算

    • 字符串转换:将其他类型转换为字符串类型

    19、多态的概念

    不同类型的对象可以响应相同的消息,响应行为可以不同。

    实现同一接口的不同类型的对象,可以被当做同一类型的对象来对待。

    绑定

    • 早绑定:在程序运行之前就实现绑定

    • 晚绑定:也称为动态绑定。

    20、输入/输出流的概念

    预定义的 I/O 流类:

    • 面向字符的流:用于处理字符数据

    • 面向字节的流:用于一般的目的

    面向字符的流: 源和目标是文本文件,Reader 和 Writer 类是所有字符流的超类。

    面向字节的流: InputStream 和 OutputStream 类是所有字节流的超类

    标准输入输出流

    按类型输入输出数据

    • printf 方法 :System.out.printf()

    • Scanner 方法:

    21、写文本文件

    • 使用 FileWriter 类写入数据到文本文件中。

    • 使用 BufferWriter 类写入数据到文本文件。

    22、读文本文件

    • 使用 FileReader, 文件读取流

    • 使用 BufferReader, 缓冲读取流

    23、主要接口与常用的实现类

    Set 接口 : SortedSet 类 和 TreeSet 类

    List 接口: Vector 类和 ArrayList 类

    Queue 接口

    Map 接口:HashMap 类和 TreeMap 类

    24、常用算法

    排序算法 sort: 使 List 元素按照某种次序排序。

    洗牌算法 shuffle: 以随机方式重排 List 元素。

    reverse: 反转算法

    copy: 两个 List 之间的复制。

    binarySearch: 二分法查找算法。

    min、max:返回指定集合的最小值和最大值。

    25、数组实用方法

    Arrays 类:定义了一组有关数组的方法

    • fill : 给数组填充

    • equals: 判断数组相等

    • sort: 数组排序

    • binary:使用二分法查找数组元素

    26、基于动态数组的集合类型

    Voctor, ArrayList:

    • 实现了 Collection 接口

    • 能够存储相同类型的对象

    • 不能存储基本数据类型的数据

    • 其容量可自动扩充

    • 添加元素效率较高

    • Voctor : 是集合框架中的遗留类,线程安全

    • ArrayList :非同步的,效率较高。

    鼓励使用ArryList

    27、遍历 Collection

    1、通过 Enumeration 及 Iterator 遍历: 优先选用 Iterator 遍历集合。

    2、使用增强 for 循环遍历

    3、通过聚集操作遍历

    28、Map 接口及其实现

    Map 接口意义: 用于存储键值对 (key-value)

    主要有 HashMap 和 TreeMap 两个类。

    **哈希表 HashMap **: 根据哈希函数计算出对象的位置。

    哈希表的容量不是固定的,可以扩充。

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/youcoding/p/13405526.html
Copyright © 2011-2022 走看看