java入门笔记二(面向对象及maven)

安装了eclipse,镜像选择中国的下载比较快。

1 继承可以使用 extends 和 implements.方法调用时super调用父类方法,this调用当前类方法.

2 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。

如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

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

3 抽象类

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

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

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

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

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

4 Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。和go语言类似。

5 Object wait() 方法让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法

6 Object clone() 方法用于创建并返回一个对象的拷贝(浅拷贝)

7 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

8 HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。

HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。

HashSet 实现了 Set 接口。

9 套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。

当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。

java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。

以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

  • 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。

  • 服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。

  • 服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。

  • Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。

  • 在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。

连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,

而客户端的输入流连接到服务器端的输出流。TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送。

 

maven是java生态下类似于js的npm或者php的composer的管理工具,看起来功能更复杂。

mac安装

1 下载http://maven.apache.org/download.cgi 选择第一个Binary tar.gz archive下载,解压。

移动一下位置 mv -i /workspace/apache-maven-3.6.3/ /usr/local/

2 vi ~/.bash_profile 加上

export M2_HOME=/usr/local/apache-maven-3.6.3

export PATH=$M2_HOME/bin:$PATH

保存source .bash_profile之后mvn -v发现有报错

The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

  

改正方法为注释掉原来的#export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home 

加一行JAVA_HOME=$(/usr/libexec/java_home) 即可

/usr/libexec/java_home 这个文件是一个 link 文件, 指向 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home ,
这个 java_home 是一个可执行的文件, 它会输出当前 JAVA_HOME , 你可以在终端中执行 /usr/libexec/java_home
或者查看该执行文件的指向 ls -l /usr/libexec/ | grep java;

 

 

posted @ 2021-02-05 00:35  阿拉蕾家的小铁匠  阅读(73)  评论(0编辑  收藏  举报