Java教程

Java只支持类之间的单继承,但支持接口之间的多继承。

 

线程必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子类将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。

 

枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。

 

基本类型类型以及对象的引用变量是存储在栈内存中 ;而对象本身的值或者说 new 创建的对象和数组是存储在堆内存中。

void是不能new出来,也就是不能在堆里面分配空间存对应的值。基本类型就是一开始在堆栈处分配好空间了。所以,有些人将void归成基本类型。

 

数据类型转换必须满足如下规则:

  • 1. 不能对boolean类型进行类型转换。

  • 2. 不能把对象类型转换成不相关类的对象。

  • 3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  • 4. 转换过程中可能导致溢出或损失精度。

  • 5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。

 

隐含强制类型转换

  • 1. 整数的默认类型是 int。

  • 2. 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f 。

 

访问控制修饰符

  • default (即缺省,什么也不写): 对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。

  • private : 在同一类内可见。类和接口不能声明为 private,使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法。Java 程序的 main() 方法必须设置成公有的,否则,Java 解释器将不能运行该类。

  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

    • 基类的 protected 成员是包内可见的,并且对子类可见;
    • 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。

 

一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。

如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。

 

StringBuilder 类和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

 

java 基本数据类型传递参数时是值传递 ;引用类型传递参数时是引用传递 。然而数组虽然是引用传递 ,但是将引用 z[] = null 只是将引用z不指向任何对象 ,并不会对原先指向的对象数据进行修改 。

 

线程属于一次性消耗品,在执行完 run() 方法之后线程便会正常结束了,线程结束后便会销毁,不能再次 start,只能重新建立新的线程对象。

 

所有异常类的基类是 Java.Lang.throwable

所有的异常类是从 java.lang.Exception 类继承的子类。

Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。

异常类有两个主要的子类:IOException 类和 RuntimeException 类。

在Java中定义了两种类型的异常和错误。

  • JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
  • 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。

 

空引用可用于访问静态变量或方法——当我们通过一个对象的引用访问静态成员属性或者方法时,访问操作只与所声明的引用类型相关;与引用对象是否为 null 无关,因为访问静态成员不需要实例化对象;即便引用不为 null ,也与运行时多态无关,因为静态成员是类相关的。

 

如果是基本类型和String,则实参不会变(传的是值);

如果是对象,则实参会改变(传的是引用)。

 

实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final。

 

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。

 

抽象类总结规定

  • 1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

  • 2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

  • 3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

  • 4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

  • 5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

 

任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。

 

在 TCP/IP 中包含一系列用于处理数据通信的协议:

  • TCP (传输控制协议) - 应用程序之间通信
  • UDP (用户数据报协议) - 应用程序之间的简单通信
  • IP (网际协议) - 计算机之间的通信
  • ICMP (因特网消息控制协议) - 针对错误和状态
  • DHCP (动态主机配置协议) - 针对动态寻址

 

TCP 用于应用程序之间的通信。

当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。

这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

UDP 和 TCP 很相似,但是更简单,同时可靠性低于 TCP。

 

IP 用于计算机之间的通信。

IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要。

通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。

IP 负责将每个包路由至它的目的地。

 

IP 路由器

当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器。

IP 路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器。

在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。

 

TCP/IP

TCP/IP 意味着 TCP 和 IP 在一起协同工作。

TCP 负责应用软件(比如您的浏览器)和网络软件之间的通信。

IP 负责计算机之间的通信。

TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。

IP 负责将包发送至接受者。

 

TCP/IP 使用 32 个比特或者 4 组 0 到 255 之间的数字来为计算机编址。

 

12 个阿拉伯数字很难记忆。使用一个名称更容易。

用于 TCP/IP 地址的名字被称为域名。runoob.com 就是一个域名。

当你键入一个像 http://www.runoob.com 这样的域名,域名会被一种 DNS 程序翻译为数字。

在全世界,数量庞大的 DNS 服务器被连入因特网。DNS 服务器负责将域名翻译为 TCP/IP 地址,同时负责使用新的域名信息更新彼此的系统。

当一个新的域名连同其 TCP/IP 地址一起注册后,全世界的 DNS 服务器都会对此信息进行更新。

 

协议族

TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大集合。


TCP - 传输控制协议

TCP 用于从应用程序到网络的数据传输控制。

TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组。


IP - 网际协议(Internet Protocol)

IP 负责计算机之间的通信。

IP 负责在因特网上发送和接收数据包。


HTTP - 超文本传输协议(Hyper Text Transfer Protocol)

HTTP 负责 web 服务器与 web 浏览器之间的通信。

HTTP 用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)。


HTTPS - 安全的 HTTP(HTTP Secure)

HTTPS 负责在 web 服务器和 web 浏览器之间的安全通信。

作为有代表性的应用,HTTPS 会用于处理信用卡交易和其他的敏感数据。


SSL - 安全套接字层(Secure Sockets Layer)

SSL 协议用于为安全数据传输加密数据。


SMTP - 简易邮件传输协议(Simple Mail Transfer Protocol)

SMTP 用于电子邮件的传输。


MIME - 多用途因特网邮件扩展(Multi-purpose Internet Mail Extensions)

MIME 协议使 SMTP 有能力通过 TCP/IP 网络传输多媒体文件,包括声音、视频和二进制数据。


IMAP - 因特网消息访问协议(Internet Message Access Protocol)

IMAP 用于存储和取回电子邮件。


POP - 邮局协议(Post Office Protocol)

POP 用于从电子邮件服务器向个人电脑下载电子邮件。


FTP - 文件传输协议(File Transfer Protocol)

FTP 负责计算机之间的文件传输。


NTP - 网络时间协议(Network Time Protocol)

NTP 用于在计算机之间同步时间(钟)。


DHCP - 动态主机配置协议(Dynamic Host Configuration Protocol)

DHCP 用于向网络中的计算机分配动态 IP 地址。


SNMP - 简单网络管理协议(Simple Network Management Protocol)

SNMP 用于计算机网络的管理。


LDAP - 轻量级的目录访问协议(Lightweight Directory Access Protocol)

LDAP 用于从因特网搜集关于用户和电子邮件地址的信息。


ICMP - 因特网消息控制协议(Internet Control Message Protocol)

ICMP 负责网络中的错误处理。


ARP - 地址解析协议(Address Resolution Protocol)

ARP - 用于通过 IP 来查找基于 IP 地址的计算机网卡的硬件地址。


RARP - 反向地址转换协议(Reverse Address Resolution Protocol)

RARP 用于通过 IP 查找基于硬件地址的计算机网卡的 IP 地址。


BOOTP - 自举协议(Boot Protocol)

BOOTP 用于从网络启动计算机。


PPTP - 点对点隧道协议(Point to Point Tunneling Protocol)

PPTP 用于私人网络之间的连接(隧道)。

 

邮件程序会用到...

您的电子邮件程序使用不同的 TCP/IP 协议:

  • 使用 SMTP 来发送邮件
  • 使用 POP 从邮件服务器下载邮件
  • 使用 IMAP 连接到邮件服务器

SMTP - 简单邮件传输协议

SMTP 协议用于传输电子邮件。SMTP 负责把邮件发送到另一台计算机。

通常情况下,邮件会被送到一台邮件服务器(SMTP 服务器),然后被送到另一台(或几台)服务器,然后最终被送到它的目的地。

SMTP 也可以传送纯文本,但是无法传输诸如图片、声音或者电影之类的二进制数据。

SMTP 使用 MIME 协议通过 TCP/IP 网络来发送二进制数据。MIME 协议会将二进制数据转换为纯文本。

 

POP - 邮局协议

POP 协议被邮件程序用来取回邮件服务器上面的邮件。

假如您的邮件程序使用 POP,那么一旦它连接上邮件服务器,您的所有的邮件都会被下载到邮件程序中(或者称之为邮件客户端)。

 

IMAP - 因特网消息访问协议

与 POP 类似,IMAP 协议同样被邮件程序使用。

IMAP 协议与 POP 协议之间的主要差异是:如果 IMAP 连上了邮件服务器,它不会自动地将邮件下载到邮件程序之中。

IMAP 使您有能力在下载邮件之前先通过邮件服务器端查看他们。通过 IMAP,您可以选择下载这些邮件或者仅仅是删除它们。比方说您需要从不同的位置访问邮件服务器,但是仅仅希望回到办公室的时候再下载邮件,IMAP 在这种情况下会很有用。

 

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。

多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。

posted @ 2019-06-17 10:09  tjjloveworld  阅读(163)  评论(0编辑  收藏  举报