• 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 **: 根据哈希函数计算出对象的位置。

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

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

  • 相关阅读:
    vi 的使用,很详细
    Linux文件的打包与压缩
    Linux初学者学习资料
    正确的关机方法: sync, shutdown, reboot, halt, poweroff, init
    Linux命令下,cp,rm,mv命令的使用
    Linux的文件权限(简单易懂)
    FireBug与FirePHP
    Git进一步学习
    jQuery插件开发
    人生就如做项目
  • 原文地址:https://www.cnblogs.com/youcoding/p/13405526.html
Copyright © 2020-2023  润新知