java成长之路(2020.3.1)

java基础学习大纲

爱的传递,希望能帮到更多的人。


详情见下图:
在这里插入图片描述

每章小结:

第一章:

  1. 所有的编程语言的最终目的都是提供一种“抽象”方法。抽象的层次越高,越接近人的思维。越接近人的思维,越容易使用。

  2. 越高级的语言越容易学习;当然,这只意味着容易入门;不意味着成为高手越容易,高手仍然需要修炼。

  3. Java的核心优势:跨平台。 跨平台是靠JVM(虚拟机)实现的。

  4. Java各版本的含义:

    JavaSE(Java Standard Edition)标准版,定位在个人计算机的应用。

    JavaEE(Java Enterprise Edition)企业版,定位在服务器端的应用。

    JavaME(Java Micro Edition)微型版,定位在消费电子产品的应用。

  5. Java程序的开发运行过程为:编写代码、编译、解释运行。

  6. JDK用于开发Java程序,JRE是Java运行环境; JVM是JRE的子集,JRE是JDK的子集。

  7. JDK配置,需要新建JAVA_HOME环境变量;需要修改Path环境变量。

  8. Java是面向对象的语言,所有代码必须位于类里面。main方法是Java应用程序的入口方法。

  9. 常见的Java集成开发环境有三个:eclipse、IntelliJ IDE、 NetBeans。

第二章:

  1. 注释可以提高程序的可读性。可划分为
项目 value
单行注释 //
多行注释 //
文档注释 /**…*/
  1. 标识符的命名规则:
标识符的命名规则:
1. 标识符必须以字母、下划线_、美元符号$开头。
2. 标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
3. Java 标识符大小写敏感,且长度无限制。
4. 标识符不可以是Java的关键字。
  1. 标识符的命名规范:
标识符的命名规范
表示类名的标识符:每个单词的首字母大写,如Man, GoodMan
表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(), eatFood()。
  1. 变量的声明格式:

    type  varName  [=value] [,varName[=value]...];
    
  2. 变量的分类:局部变量、实例变量、静态变量。

  3. 常量的声名格式:

    final  type  varName = value ;
    
  4. Java的数据类型可分为基本数据类型和引用数据类,基本数据类型的分类如下:

项目 value
整型变量: byte、short、int、long
浮点型: float、double
字符型: char
布尔型: boolean,值为true或者false。
  1. Java语言支持的运算符可分为:
项目 value
算术运算符: +,-,*,/,%,++,- -
赋值运算符: =
扩展赋值运算符: +=,- =,*=,/=
关系运算符: >,<,>=,<=,==,!= ,instanceof
逻辑运算符: &&,!,
位运算符: &,^,~ , >>,<<,>>>,
字符串连接符: +
条件运算符: ?:
  1. 基本数据类型的类型转换可分为:
项目 value
自动类型转换: 容量小的数据类型可以自动转换为容量大的数据类型。
强制类型转换: 用于显式的转换一个数值的类型,语法格式:(type)var 。
  1. 键盘的输入:Scanner类的使用。

第三章:

  1. 从结构化程序设计角度出发,程序有三种结构:顺序结构、选择结构和循环结构。
  2. 选择结构:
序号 Value
(1) if单选择结构 if-else双选择结构 if - else if - else多选择结构。
(2) switch多选择结构。
  1. 多选择结构与switch的关系:当布尔表达式是等值判断的情况,可使用多重选择结构或switch结构,如果布尔表达式区间判断的情况,则只能使用多重选择结构。
序号 Value
(1) 循环结构
(2) 当型:while与for
(3) 直到型:do-while
  1. while与do-while的区别,在布尔表达式的值为false时while的循环体一次也不执行,而do-while至少执行一次。

  2. break可以在switch与循环结构中使用,而continue只能在循环结构中使用。

  3. 方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。

  4. 方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法。

  5. 任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

第四章:

  1. 面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。

  2. 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

  3. 对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。

  4. 构造器也叫构造方法,用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。

  5. Java引入了垃圾回收机制,令C++程序员最头疼的内存管理问题迎刃而解。Java程序员可将更多的精力放到业务逻辑上而不是内存管理工作,大大提高开发效率。

  6. this的本质就是“创建好的对象的地址”! this不能用于static方法中。

  7. 在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。在static方法中不可直接访问非static的成员。

  8. Java方法中所有参数都是“值传递”,也就是“传递的是值的副本”。也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。

  9. 通过package实现对类的管理;如果我们要使用其他包的类,需要使用import导入,从而可以在本类中直接通过类名来调用。

第五章:

· 高级语言可分为:面向过程和面向对象两大类。

  1. 面向过程与面向对象都是解决问题的思维方式,都是代码组织的方式。

  2. 解决简单问题可以使用面向过程。

  3. 解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。

· 对象和类的关系是特殊到一般,具体到抽象的关系。

· 栈内存:

  1. 每个线程私有,不能实现线程间的共享!

  2. 局部变量放置于栈中。

  3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

· 堆内存:

  1. 放置new出来的对象!

  2. 堆是一个不连续的内存空间,分配灵活,速度慢!

· 方法区:

  1. 被所有线程共享!

  2. 用来存放程序中永远是不变或唯一的内容(类代码信息、静态变量、字符串常量)。

· 属性用于定义该类或该类对象包含的数据或者说静态属性。属性作用范围是整个类体。Java使用默认的值对其初始化。

· 方法则用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。

· 构造器又叫做构造方法(constructor),用于构造该类的实例。Java通过new关键字来调用构造方法,从而返回该类的实例,是一种特殊的方法。

· 垃圾回收机制:

  1. 程序员无权调用垃圾回收器。

  2. 程序员可以通过System.gc()通知垃圾回收器(Garbage Collection,简称GC)运行,但是Java规范并不能保证立刻运行。

  3. finalize方法,是Java提供给程序员用来释放对象或资源的方法,但是尽量少用。

· 方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。 调用时,会根据不同的参数表选择对应的方法。

· this关键字的作用:

  1. 让类中的一个方法,访问该类的另一个方法或属性。

  2. 使用this关键字调用重载构造方法,可以避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句。

· static关键字:

  1. 在类中,用static声明的成员变量为静态成员变量,也称为类变量。

  2. 用static声明的方法为静态方法。

  3. 可以通过对象引用或类名(不需要实例化)访问静态成员。

· package的作用:

  1. 可以解决类之间的重名问题。

  2. 便于管理类:合适的类位于合适的包!

· import的作用:

  1. 通过import可以导入其他包下面的类,从而可以在本类中直接通过类名来调用。

· super关键字的作用:

  1. super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

· 面向对象的三大特征:继承、封装、多态。

· Object类是所有Java类的根基类。

· 访问权限控制符:范围由小到大分别是private、default、protected、public。

· 引用变量名 instanceof 类名 来判断该引用类型变量所“指向”的对象是否属于该类或该类的子类。

· final关键字可以修饰变量、修饰方法、修饰类。

· 抽象类是一种模版模式。抽象类为所有子类提供了一个通用模版,子类可以在这个模版基础上进行扩展,使用abstract修饰。

· 使用abstract修饰的方法为抽象方法必须被子类实现,除非子类也是抽象类。

· 使用interface声明接口:

  1. 从接口的实现者角度看,接口定义了可以向外部提供的服务。

  2. 从接口的调用者角度看,接口定义了实现者能提供哪些服务。

· 内部类分为成员内部类、匿名内部类和局部内部类。

· String位于java.lang包中,Java程序默认导入java.lang包。

· 字符串的比较"=="与equals()方法的区别。

第六章:

  1. Error与Exception都继承自Throwable类

  2. Error类层次描述了Java运行时系统内部错误和资源耗尽错误。

  3. Exception类是所有异常类的父类,其子类对应了各种各样可能出现的异常事件。

  4. 常见的异常类型:

    --ArithmeticException
    
    --NullPointerException
    
    --ClassCastException
    
    --ArrayIndexOutOfBoundsException
    
    --NumberFormatException
    
  5. 方法重写中声明异常原则:子类声明的异常范围不能超过父类声明的范围。

  6. 异常处理的三种方式:

    --捕获异常:try-catch-finally
    
    --声明异常:throws
    
  7. 自定义异常类只需从Exception类或者它的子类派生一个子类即可。

第七章:

  1. 数组是相同类型数据的有序集合。

  2. 数组的四个基本特点:

    -- 其长度是确定的。
    
    -- 其元素必须是相同类型。
    
    -- 可以存储基本数据类型和引用数据类型。
    
    -- 数组变量属于引用类型。
    
  3. 一维数组的声明方式:

    -- type[] arr_name; (推荐使用这种方式)
    
    -- type arr_name[]。
    
  4. 数组的初始化:静态初始化、动态初始化和默认初始化。

  5. 数组的长度:数组名.length,下标的合法区间[0,数组名.length-1]。

  6. 数组拷贝:System类中的static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法。

  7. 数组操作的常用类java.util.Arrays类:

    -- 打印数组:Arrays.toString(数组名);
    
    -- 数组排序:Arrays.sort(数组名);
    
    -- 二分查找:Arrays.binarySearch(数组名,查找的元素)。
    
  8. 二维数组的声明:

    -- type[][]arr_name=new type[length][];
    
    -- type arr_name[][]=new type[length][length]。
    

第八章:

  1. 每一个基本数据类型对应一个包装类。

  2. 包装类的用途:

    (1)作为和基本数据类型对应的引用类型存在,方便涉及到对象的操作。
    
    (2)包含每种基本数据类型的相关属性如最大值、最小值以及相关的操作方法。
    
  3. JDK1.5后在Java中引入自动装箱和拆箱。

  4. 字符串相关类String、StringBuffer与StringBuilder:

    String:不可变字符序列。
    
    StringBuffer:可变字符序列,并且线程安全,但是效率低。
    
    StringBuilder:可变字符序列,线程不安全,但是效率高(一般用它)。
    
    日期与时间类Date、DateFormat、SimpleDateFormat、Calendar、GregorianCalendar。
    
  5. Math类的常用方法:

    pow(double a,double b)
    
    max(double a,double b)
    
    min(double a,double b)
    
    random()
    
    long round(double a)
    
  6. 与操作文件相关的File类。

  7. 当需要定义一组常量时,使用枚举类型。

第九章:

  1. Collection 表示一组对象,它是集中、收集的意思,就是把一些数据收集起来。

  2. Collection接口的两个子接口:

    1) List中的元素有顺序,可重复。常用的实现类有ArrayList、LinkedList和 vector。
    
     Ø ArrayList特点:查询效率高,增删效率低,线程不安全。
    
     Ø LinkedList特点:查询效率低,增删效率高,线程不安全。
    
     Ø vector特点:线程安全,效率低,其它特征类似于ArrayList。
    
    
    2) Set中的元素没有顺序,不可重复。常用的实现类有HashSet和TreeSet。
    
     Ø HashSet特点:采用哈希算法实现,查询效率和增删效率都比较高。
    
     Ø TreeSet特点:内部需要对存储的元素进行排序。因此,我们对应的类需要实现Comparable接口。这样,才能根据compareTo()方法比较对象之间的大小,才能进行内部排序。
    
  3. 实现Map接口的类用来存储键(key)-值(value) 对。Map 接口的实现类有HashMap和TreeMap等。Map类中存储的键-值对通过键来标识,所以键值不能重复。

  4. Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。

  5. 类 java.util.Collections 提供了对Set、List、Map操作的工具方法。

  6. 如下情况,可能需要我们重写equals/hashCode方法:

    1) 要将我们自定义的对象放入HashSet中处理。
    
    2) 要将我们自定义的对象作为HashMap的key处理。
    
    3) 放入Collection容器中的自定义对象后,可能会调用remove、contains等方法时。
    
  7. JDK1.5以后增加了泛型。泛型的好处:

    1) 向集合添加数据时保证数据安全。
    
    2) 遍历集合元素时不需要强制转换。
    

第十章:

  1. 按流的方向分类:

    输入流:数据源到程序(InputStream、Reader读进来)。
    
    输出流:程序到目的地(OutPutStream、Writer写出去)。
    
  2. 按流的处理数据单元分类:

    字节流:按照字节读取数据(InputStream、OutputStream)。
    
    字符流:按照字符读取数据(Reader、Writer)。
    
  3. 按流的功能分类:

    节点流:可以直接从数据源或目的地读写数据。
    
    处理流:不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。
    
  4. IO的四个基本抽象类:InputStream、OutputStream、Reader、Writer

  5. InputStream的实现类:

    FileInputStream
    
    ByteArrayInutStream
    
    BufferedInputStream
    
    DataInputStream
    
    ObjectInputStream
    
  6. OutputStream的实现类:

    FileOutputStream
    
    ByteArrayOutputStream
    
    BufferedOutputStream
    
    DataOutputStream
    
    ObjectOutputStream
    
    PrintStream
    
  7. Reader的实现类:

    FileReader
    
    BufferedReader
    
    InputStreamReader
    
  8. Writer的实现类:

    FileWriter
    
    BufferedWriter
    
    OutputStreamWriter
    
  9. 把Java对象转换为字节序列的过程称为对象的序列化。

  10. 把字节序列恢复为Java对象的过程称为对象的反序列化。

第十一章:

  1. 程序:Java源程序和字节码文件被称为“程序(Program)”,是一个静态的概念。

  2. 进程:执行中的程序叫做进程(Process),是一个动态的概念。每个进程由3部分组成:cpu、data、code。

  3. 线程:是进程中一个“单一的连续控制流程 (a single sequential flow of control)”。

  4. 在Java中实现多线程的方式:

    ▪ 继承Thread类实现多线程
    
    ▪ 实现Runnable接口实现多线程
    
  5. 线程的状态:

    ▪ 新生状态
    
    ▪ 就绪状态
    
    ▪ 运行状态
    
    ▪ 死亡状态
    
    ▪ 阻塞状态
    
  6. 暂停线程执行的方法:

    ▪ sleep()
    
    ▪ yield()
    
    ▪ join()
    
  7. 实现线程同步的两种方式:

    ▪ synchronized 方法 :
    
public  synchronized  void accessVal(int newVal);
 ▪ synchronized 块:
synchronized(syncObject)
{ 
//允许访问控制的代码 
}
  1. 同步解决问题的另一种典型方式:生产者/消费者模式。

  2. 线程通信的方法:

    ▪ wait()
    
    ▪  notify()
    
    ▪ notifyAll()
    

    都是Object类的方法,只能在同步方法和同步代码块中使用。

第十二章:

  1. 端口是虚拟的概念,并不是说在主机上真的有若干个端口。

  2. 在www上,每一信息资源都有统一且唯一的地址,该地址就叫URL(Uniform Resource Locator),它是www的统一资源定位符。

  3. TCP与UDP的区别:

    1)TCP是面向连接的,传输数据安全,稳定,效率相对较低。
    
    2)UDP是面向无连接的,传输数据不安全,效率较高。
    
  4. Socket通信是一种基于TCP协议,建立稳定连接的点对点的通信。

  5. 网络编程是由java.net包来提供网络功能。

    1)InetAddress:封装计算机的IP地址和DNS(没有端口信息!)。
    
    2)InetSocketAddress:包含IP和端口,常用于Socket通信。
    
    3)URL:以使用它的各种方法来对URL对象进行分割、合并等处理。
    
  6. 基于TCP协议的Socket编程和通信:

    1)“请求-响应”模式:
    
       --Socket类:发送TCP消息。
    
       --ServerSocket类:创建服务器。
    
  7. UDP通讯的实现:

    1)DatagramSocket:用于发送或接收数据报包。
    
    2)常用方法:send()、receive()、 close()。
    
  8. DatagramPacket:数据容器(封包)的作用。

    1)常用方法:构造方法、getAddrress(获取发送或接收方计算机的IP地址)、getData(获取发送或接收的数据)、setData(设置发送的数据)。
    
发布了1 篇原创文章 · 获赞 3 · 访问量 98

猜你喜欢

转载自blog.csdn.net/qq_45637040/article/details/104590860