天天看点

Java语言相关基础知识点整理

基本知识点

项目结构目录:

1)包:代码类的容器

2)Src:源代码文件

3)Bin:编译后生产的 .Class 文件目录,用于系统运行

输出的几种方式:

1)System.out.print 无换行打印

2)System.out.println 有换行打印

3)System.out.printf 格式化输出

开发Java程序的步骤:

1) 源码编写

2) 编译(保存或运行时,系统自动编译,会对应 .JAVA 文件在 bin 目录生成名字一样的 .CLASS 文件)

3) 系统运行会到Bin目录下找到该Class文件进行运行

制表符:

1)\n:回车

2)\t:Tab

占位符:

a)%s:字符串

b)%d:整数

c)%f:浮点

d)%c:字符

注释:用于程序的标注,不参与程序执行(注释掉的代码不能参与程序运行)

1)单行注释:// 快捷键 Ctrl+ /

2)多行注释:/注释的内容/

JDK中的重要目录或文件:

bin目录:存放编译、运行Java程序的可执行文件。

Jre目录:存放Java运行环境的文件。

lib目录:存放Java的类库文件。

src.rar文件:构成Java平台核心API的所有类的源文件。

变量定义方式:

a)直接定义直接赋值:int a=1

b)先定义,再赋值:int a;a=1

命名法则:

a)驼峰命名法:maxAge,适用于定义变量等

b)帕斯卡命名法:MaxAge,适用于定义类、方法等

无论帕斯卡还是驼峰,第二个单词的首字母都要保持大写

输入:

Scanner sc = new Scanner(System.in);

(存放在java.util包下)

● Sc.next():获得屏幕输入的字符串类型(String)

● Sc.nextInt():获得输入的整数类型(short int long)

● Sc.nextDouble():获取输入的浮点类型(float double)

● Sc.next().CharAt(0):获取输入的字符类型(char)

数据类型转换分两种模式:

自动转换(隐式转换,小转大)

强制类型转换(显式转换):大转小

总结
  1. 程序是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令集合。
  2. Java包括编程语言和相关的技术
  3. Java主要用于开发两类程序:桌面应用程序和Internet应用程序。
  4. 开发一个Java应用程序的基本步骤:编写源程序、编译程序和运行程序。源程序以 .Java 为扩展名,编译后生成的文件以 .class 为扩展名。使用 .Javac命令可以编译 .Java文件,使用java命令可以运行编译后生成的 .class文件。
  5. 编写Java程序要符合Java编程规范,为程序编写注释可大大增加程序的可读性。
  6. MyEclipse是一个功能强大的集成开发环境。它的各种窗口便于Java程序的开发、调试和管理。

变量、数据类型和运算符

变量:计算机保存数据的媒介,计算机会根据变量的类型来自动分配该类型对应的内存空间。

总结
  1. 变量是一个数据存储空间的表示,它是存储数据的基本单元。
  2. Java中常用的数据类型有整形(int)、双精度浮点型(double)、字符型(char)、和字符串型(String)。
  3. 变量要先声明并赋值,然后才能使用。
  4. Java提供各种类型的运算符,具体如下:

    ● 赋值运算符(=)。

    ● 算术运算符(+、-、*、/、%)。

    ● 关系运算符(>、>=、<、<=、= =、!=)。

  5. 数据类型转换时为了方便不同类型的数据之间进行运算。
  6. 数据类型转换包括自动类型转换盒强制类型转换,发生自动类型转换时必须符合一定的条件。
  7. Java中使用boolean类型表示真假,boolean类型的两个值为true和false。
  8. Java中使用关系运算符可以用来比较大小、高低、多少等,比较后的结果是boolean类型。
  9. Java提供Scanner类,可以实现从控制台获取键盘上输入的信息。

选择结构

总结
  1. 常见的逻辑运算符有&&、||、!。
  2. Java中的if选择结构,包括一下形式:

    ● 基本的if选择结构:可以处理单一或组合条件的情况。

    ● if-else选择结构:可以处理简单的条件分支情况。

    ● 多重if选择结构:可以处理连续区间的条件分支情况。

    ● 嵌套if选择结构:可以处理复杂的条件分支情况。

  3. 当需要多重分支并且条件判断是等值的情况下,使用switch选择结构代替多重if选择结构会更简单,代码结构更清晰易读。在switch选择结构时不要忘记在每个case的最后加上break语句。
  4. 为了增加程序的健壮性,可以在程序中主动做出判断,并给出用户友好的提示。
  5. 在实际开发中,遇到分支情况时,通常会用综合运用if选择结构的各种形式及switch选择结构来解决。

循环结构

总结
  1. 循环结构由循环条件和循环操作构成。只要满足循环条件,循环操作就会反复执行。
  2. 使用循环解决问题的步骤:分析循环条件和循环操作,套用循环的语法写出代码,检查循环能否退出。
  3. 编写循环结构代码时需注意:循环变量的初值、循环操作中对循环变量值的改变和循环条件三者间的关系;确保循环次数正确,不要出现“死循环”。
  4. while循环结构的特点是先判断,后执行;do-while循环结构的特点是先执行,再判断。
  5. 程序调试是满足暂停程序、观察变量和逐条执行语句等功能的工具和方法的总称。其主要方法包括设置断点、单步运行和观察变量。
  6. for循环结构的语法格式如下。

    for(表达式1;表达式2;表达式3){

    //循环体

    }

    ● 表达式1:循环结构的初始部分,为循环变量赋初值。

    ● 表达式2:循环结构的循环条件

    ● 表达式3:循环结构的迭代部分,通常用来修改循环变量的值。

  7. 在循环中,可以使用break和continue语句控制程序的流程。

    break语句用于终止某个循环,程序跳转到循环体外的下一条语句。

    continue语句用于跳出本次循环,进入下一次循环。

  8. 二重循环就是一个循环体内又包含另一个完整的循环结构的循环。
  9. 在二重循环中可以使用break、continue语句控制程序的执行。

数组

总结
  1. 数组是可以再内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型。
  2. 数组中的元素通过数组的下标进行访问,数组的下标从0开始。
  3. 数组可用一个循环为元素赋值,或者用一个循环输出数组中的元素信息。
  4. 通过数组,length可获得数组长度。
  5. 利用Arrays类提供的sort()方法可以方便地对数组中的元素进行排序。

类和对象

总结
  1. 对象是用来描述客观事物的一个实体,由一组属性和方法构成。
  2. 类定义了对象将会拥有的特征(属性)和行为(方法)。
  3. 类和对象的关系是抽象和具体的关系。类是对象的类型,对象是类的实例。
  4. 对象的属性和方法被共同封装在类中,相辅而成,不可分割。
  5. 面向对象程序设计的优点如下。

    ● 与人类的思维习惯一致。

    ● 隐藏信息,提高了程序的可维护性和安全性。

    ● 提高了程序的可重用性。

  6. 使用类的步骤如下。

    ● 定义类:使用关键字class。

    ● 创建类的对象:使用关键字new。

    ● 使用类的属性和方法:使用“.”操作符。

类的无参方法

总结
  1. 定义了类的方法必须包括以下三个部分。

    ● 方法的名称。

    ● 方法的返回值的类型。

    ● 方法的主体。

  2. 类的方法调用,使用如下两种形式。

    ● 同一个类中的方法,直使用方法名调用该方法。

    ● 不同类的方法,首先创建对象,再使用“对象名,方法名”来调用。

  3. 在Java中,有成员变量和局部变量,他们的作用域各不相同。
  4. JavaDoc注释以“”结尾,并且提供了JavaDoc注释标签。使用JavaDoc技术可以生成开发文档。

带参数的方法

总结
  1. 带参方法定义的一般形式如下。

    <访问修饰符> 返回类型 <方法名>(<参数列表>){

    //方法的主体

    }

  2. 调用带参方法与调用无参方法的语法是相同的,但是在调用带参方法时必须传入实际的参数的值。
  3. 形参是在定方法是对参数的称呼,实参是在调用方法时传递给方法的实际的值。
  4. Java中提供包来管理类。声明包使用关键字package,导入包使用关键字import。

字符串

总结
  1. 定义一个字符串可以使用String类和StringBuffer类。
  2. String类提供了大量的操作字符串的方法,常用的如下。

    ● 获得字符串的长度:length()。

    ● 比较字符串:equals()。

    ● 连接字符串:concat()。

    ● 提取字符串:substring()。

    ● 搜索字符串:indexOf()。

    ● 拆分字符串:spilt()。

  3. 常用的StringBuffer类提供的方法如下。

    ● 转换成String类型:toString()。

    ● 连接字符串:append()。

    ● 插入字符串:insert().

封装

总结
  1. 现实世界是“面向对象”的,面向对象就是采用“现实模拟”的方法设计和开发程序。
  2. 面向对象设计是目前计算机软件开发中最流行的技术。面向对象设计的过程就是抽象过程。
  3. 类是对某一事物的描述,是抽象的、概念上的意义。对象是实际存在的该事物的个体,是具体的、现实的。
  4. 如果同一个类中包含了两个或两个以上的方法,它们的方法名相同,方法参数个数或参数类型不同,则称方法被重载了,这个过程称为方法重载。
  5. 构造方法用于创建类的对象。构造方法的主要作用是在创建对象时执行的一些初始化操作。可以通过构造方法重载来实现多种初始化行为。
  6. 封装就是将类的成员属性生声明为私有的,同时提供公有的方法实现对该成员属性的存取操作。
  7. 封装的好处:隐藏类的实现细节;让使用者只能通过程序规定的方法来访问数据;可以方便地介入存取控制语句,限制不可以操作。

继承

总结
  1. 继承是Java中实现代码重用的重要手段之一。Java中只支持单继承,即一个类只能有一个直接父类。Java.lang.Object类是所有Java类的祖先。
  2. 在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或者覆盖。
  3. 子类中重写的方法和父类中被重写的方法必须具有相同的方法名、参数列表,返回值类型必须和被重写方法的返回值类型相同或是其子类。
  4. 如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无惨构造方法。
  5. 抽象类不能实例化。抽象类中可以有零到多个抽象方法。非抽象类若继承抽象类,则必须重写父类的所有抽象方法。
  6. 子类必须重写父类所有的抽象方法才能实例化,否则子类还是一个抽象类。
  7. 用final修饰的类,不能再被继承。用final修饰的方法,不能被子类重写。用final修饰的变量将变成常量,只能在初始化时进行赋值,不能在其他地方修改。

多态

总结
  1. 通过多态可以减少类中的代码量,可以提高代码的可扩展性和可维护性。继承是多态的基础,没有继承就没有多态。
  2. 把子类转换为父类称为向上转型,自动进行类型转换。把父类转换为子类称为向下转型,必须进行强制类型转换。
  3. 向上转型后通过父类引用变量调用方法是子类覆盖或继承父类的方法,通过父类引用变量无法调用子类特有的方法。
  4. 向下转型后可以访问子类特有的方法。必须转换为父类指向的真实子类类型,否则将出现类型转换异常ClassCastException。
  5. Instanceof运算符用于判断一个对象是否属于一个类或者实现了一个接口。
  6. Instanceof运算符通常和强制类型转换结合使用,先通过instanceof进行类型判断,再进行相应的强制类型转换。
  7. 使用父类作为方法形参和使用父类作为返回值类型是使用多态的常用方式。

接口

总结
  1. 接口中的属性都是全局静态常量,接口中的方法都是全局抽象方法,接口中没有构造方法。
  2. 类只能继承一个类,但可以实现多个接口。一个类如果实现了一个接口,则必须实现接口中的全部方法,否则必须将其定义为抽象类。Java通过实现接口达到了多重继承的效果。
  3. 接口表示一种约定,接口表示一种能力。接口体现了约定和实现相分离的原则。
  4. 抽象类利于代码复用,接口利于代码维护。
  5. 通过面向对象编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性。
  6. 面向接口编程意味着:开发系统是,主体构架使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换系统。
  7. C#中接口的成员主要是方法和属性。接口中不能包含常量、变量、构造方法和任何静态成员。定义接口是显式指定任何修饰符是非法的。

异常

总结
  1. 异常是由Java应用程序抛出和处理的非严重错误,它可以分为Checked异常和运行时异常两大类。
  2. Checked异常必须捕获或者声明抛出,否则无法通过编译。运行时异常不要求必须捕获或者声明抛出。
  3. Java的异常处理是通过五个关键字来实现的:try、catch、finally、throw和throws。
  4. 即使在try块、catch块中存在return语句,finally块中的语句也会执行。finally块中语句不被执行的唯一情况是,在异常处理的代码中执行System.exit()。
  5. 可以在一个try语句块后面跟多个catch语句块,分别处理不同的异常。但排列顺序必须是从特殊到一般,最后一个一般为Exception类。
  6. log4j是一个优秀的日志记录工具,常用使用方式是配置log4j.properties文件,从而控制日志的输出级别、目的地和输出格式。

集合框架

总结
  1. 集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合可使用于不同场合。
  2. 集合框架是为表示和操作集合而规定的一种统一的标准体系结构。集合框架包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
  3. 通常来说Java的集合框架有两大接口,即Collection和Map。其中Collection有两个子接口,即List和Set。各接口区别如下。

    ● Collection接口存储一组不唯一、无序的对象。

    ● Set接口继承Collection接口,存储一组唯一、无序的对象。

    ● List接口继承Collection接口,存储一组不唯一、有序的对象。

    ● Map接口存储一组成对的键-值对象,提供key到Value的映射。Key不要求有序,不允许重复。Value同样不要求有序,但允许重复。

  4. ArrayList和数组采用相同的存储方式,它的优点在于遍历元素和随机访问元素的效率比较高。LinkedList采用链表存储方式,优点在于插入、删除元素时效率比较高。
  5. HashMap是最常见的Map实现类,它的存储方式是哈希表,优点是查询指定元素效率比较高。
  6. lterator为集合而生,专门实现集合的遍历。它隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口。
  7. 使用泛型集合在创建集合对象时指定集合中元素的类型,在从集合中取出元素时无需进行类型强制转换,避免了ClassCastException异常。
  8. Java中共有八个包装类:Byte、Short、Integer、Long、Float、Double、Boolean、Character

多线程

总结
  1. 多线程允许程序员编写可最大程度利用CPU的高效程序。
  2. 在Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。主线程的重要性体现在以下两个方面。

    ● 它是产生其他子线程的线程。

    ● 通常它必须最后完成执行,因为它执行各种关闭动作。

  3. 可通过两种方式创建线程。

    ● 声明一个继承了的Thread类的子类,在此子类中,实现Thread类的run()方法。

    ● 声明一个实现Runnable接口的类,然后实现run()方法。

  4. 每一个线程创建和死亡前,均会处于创建、就绪、运行、阻塞、死亡状态之一。
  5. 在Java实现的多线程应用程序中,可以通过调用Thread类中的方法来实现对线程对象的操作。

    ● 调整线程的优先级:Java线程有优先级,在通等的情况下,优先级高的线程会获得较多的运行机会。Java线程的优先级用1-10的整数表示。

    ● 线程睡眠:sleep(long millis)方法使线程转到阻塞状态。

    ● 线程的强制运行:join()方法可以强制某一线程运行。

    ● 线程礼让:yield()方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。

  6. 当多个线程对象操纵同一共享资源时,要使用synchronized关键字来进行资源的同步处理,可以使用通过同步方法和同步代码块来实现线程同步。

文件操作 (File I/O)

总结
  1. File类用于访问文件或目录的属性。
  2. 流是指一连串流动的字符,是以先进先出的方式发送信息的通道。程序和数据源之间是通过流联系起来的。
  3. 流可以分为输入流和输出流,也可以分为字节流和字符流。
  4. FileInputStream和FileOutputStream以字节流的方式读写文本文件。
  5. BufferedReader和BufferedWriter以字符流的方式读写文本文件,而且效率更高。
  6. DataInputStream和DataOutputStream可用于读写二进制文件。