maven
maven 报错
Unknown lifecycle phase “–version”. You must specify a valid lifecycle pid>:
- 解决办法:
第一步:mvn install 第二步:mvn compiler:compile 第三步:mvn org.apache.maven.plugins:maven-compiler-plugin:compile 第四步:mvn org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile
建立项目
file->new->project->Maven->Create from archetype->org.apache.maven.archetypes:maven-archetype-quickstart
- 父子项目:
在父项目中新建一个maven项目,并将父项目中的src文件删除。
- pom.xml 文件配置如下,即可以生成可执行jar包。
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<finalName>test4</finalName><!--你的jar文件的名字-->
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.hand.App</mainClass><!--你的程序的入口文件名,含有main文件的java文件-->
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- build.sh文件,实现打包,运行的功能:
cd sub1
mvn install
java -jar target/sub1.jar
cd ..
cd sub2
mvn install
...
package、install、deploy的联系与区别
- package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
- install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
- deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
java
方法参数的使用情况
- 一个方法不能修改一个基本数据类型的参数(即布尔型或数值型)。
- 一个方法可以改变一个对象参数的状态。
- 一个方法不能让对象参数引用一个新的对象。
静态导入
import static java.lang.System.out;
println("hello world");
阻止继承:final类和方法
- 类中的特定方法被声明为final后,子类就不能覆盖这个方法。final类中所有的方法自动成为final方法,但不包括域。对于final域来说,构造对象之后就不允许改变它们的值了。
- String类也是final类。
强制类型转换
将一个子类的引用赋给一个超类的变量,编译器是允许的。 将一个超类的引用赋给一个子类的变量,必须进行类型转换。 用instanceof 判断能否成功转换:
if (a instanceof b){ ... ... }
抽象类
- 抽象类不能被实例化。
- 类即使不含抽象方法,也可以将类声明为抽象类。
- 可以定义一个抽象类的对象变量,但它只能引用非抽象子类的对象。
equals判断两个对象是否相等
class Employee extends Person{
private double salary;
private LocalDate hireDay;
...
public boolean equals(Object otherObject){
// java 核心技术 卷1 P68-169
// 检测是否引用同一个对象
if (this == otherObject) return true;
if (otherObject == null) return false;
// 检测是否属于同一个类
// getClass 返回一个对象所属的类
if (getClass() != otherObject.getClass()) return false;
Employee other = (Employee) otherObject;
return name.equals(other.name) && salary == other.salary && hireDay.equals(other.hireDay);
}
}
class Manage extends Employee{
private double bonus;
...
@Override
public boolean equals(Object otherObject) {
if (! super.equals(otherObject)) return false;
Manage other = (Manage)otherObject;
return bonus == other.bonus;
}
}
lambda 表达式
- 对于只有一个抽象方法的接口,需要这种接口对象时,就可以提供一个lanbda表达式——函数式接口。
- 不能把lambda表达式赋给类型为Object的变量,Object不是一个函数式接口。
java.util.function
- BiFunction
,描述了参数类型为T和U而且返回类型为R的函数。
BiFunction<String,String,Integer> comp
= (first,second) -> first.length() - second.length();