java maven mvn

使用命令行

javac foo/bar/Main.java
java foo.bar.Main 

反射机制

反射技术可以操作私有属性,私有方法

Class cls = Monkey.class;

Monkey monkey = new Monkey();
Class cls = monkey.getClass();

Class cls = Class.forName("foo.bar.Monkey");
import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) {
        try {
            Monkey monkey = new Monkey();
            Class cls = Monkey.class;
            Field field = cls.getDeclaredField("sex");
            field.setAccessible(true);

            field.set(monkey, "女");

            String sex = (String)field.get(monkey);
            System.out.println(sex);
            
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args) {
        try {
            Monkey monkey = new Monkey();
            Class cls = Monkey.class;
            
            Method setMethod = cls.getDeclaredMethod("setSex", String.class);
            setMethod.setAccessible(true);

            Method getMethod = cls.getDeclaredMethod("getSex");
            getMethod.setAccessible(true);

            setMethod.invoke(monkey, "男");

            String sex = (String)getMethod.invoke(monkey);
            System.out.println(sex);

        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

设计模式

单例模式

当应用程序只需要构造类的一个实例

懒汉模式

/**
 *  等程序需要时再初始化实例,可节省资源
 */
public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

饿汉模式 

/**
 *  确保线程安全
 */
public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

工厂模式

简单工厂模式

使用一个单独的工厂类来创建不同的对象

public class PizzaFactory {

    public Pizza createPizza(String type) {

        Pizza pizza = null;

        if(type.equals("cheeze")) {
            pizza = new CheezePizza();
        }

        return pizza;
    }
}

class PizzaStore {

    public Pizza orderPizza() {
        Pizza pizza;
        pizza = factory.createPizza("cheeze");
        pizza.prepare();
        pizza.bake();

        return pizza;
    }
}

工厂方法模式

工厂方法将对象的创建延迟到子类

java maven mvn_第1张图片

public abstract class PizzaStore {

    public Pizza orderPizza(String type) {
        Pizza pizza;

        pizza = createPizza(type);

        pizza.prepare();
        pizza.bake();
    }

    public abstract Pizza createPizza(String type);

}

抽象工厂模式

抽象工厂模式提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类

java maven mvn_第2张图片

public abstract class Store {

    public abstract Pizza createPizza(String type);
    public abstract Coke createCoke(String type);

}

maven用法

pom.xml


    
    

    
    

    
        
        

        
        
    

  
    21
    21
  

maven生命周期

mvn clean                         # 清理项目,删除target文件夹,不会删除本地仓库

mvn compile                     # 把.java编译成.class,并输出在target文件夹中

mvn test                            # 运行测试代码

mvn package                    # 把项目打包成jar,输出在target文件夹中

mvn install                        # 把项目安装在本地仓库中(.m2文件夹)

mvn deploy                       # 推送到远程仓库

maven命令行

mvn archetype:generate                # 通过模板创建新项目

mvn dependency:tree                   # 查看依赖

mvn clean clover:setup test clover:aggregate clover:clover      # clover生成test覆盖率报告     
# mvn :

# pitest生成代码突变报告和覆盖率报告
mvn clean test-compile org.pitest:pitest-maven:mutationCoverage    

# 自动生成测试代码   <项目根目录>/.evosuite
mvn -DmemoryInMB=2500 -Dcores=5 evosuite:generate                

maven plugin使用

maven名词解释

groupId是开发人员

artifactId是项目名字

版本号后的SNAPSHOT意思是处于开发阶段

Eclipse

Eclipse 是一个 Java 应用程序,依赖于 JVM 来执行。

Eclipse默认使用的是jre的运行环境,所以找不到jdk的包,解决方法,编辑Eclipse安装目录下面的eclipse.ini,在”-vmargs”前添加下面代码,保存、重启eclipse后Update Project即可。

-vm
\jre\bin\server\jvm.dll

-vm 是 Eclipse 配置文件 eclipse.ini 中的一个选项,它指定了 Eclipse 使用的 Java 虚拟机 

java maven mvn_第3张图片

mvn         # 与上述图等价

多线程

# 自定义线程池    (常驻线程, 最大线程, 线程过期时间, 时间单位, 存储队列)
ExecutorService pool = new ThreadPoolExecutor(3, 10, 1, TimeUnit.SECONDS, queue);

ExecutorService fixedPool = Executors.newFixedThreadPool(5);

# 大小无限制
ExecutorService cachedPool = Executors.newCachedThreadPool();

ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
pool.submit(Runnable);     # 有返回值    不阻塞
pool.execute(Runnable);    # 无返回值    不阻塞

pool.shutdown();           # 原有任务会继续执行
Future future = pool.submit(Callable);

future.get();            # 会阻塞

垃圾回收

你可能感兴趣的:(java)