• System:
  • Runtime:
  • Random:
  • Scanner:
  • Arrays:
  • MessageFormat:
  • Math:
  • 日期:
  • Comparable:
  • cloneable接口:
  • 数字处理:
  • MD5加密:
  • lambda表达式:
  • RandomAccessFile:
  • Properties:
  • StringUtils:

  

System:

System.out.println(System.currentTimeMillis());//从1970年开始,打印时间戳格式的时间
System.exit(0);//0表示正常对出

Runtime:

Runtime rt = Runtime.getRuntime();
System.out.println("处理器数量:"+rt.availableProcessors());
System.out.println("JVM总内存数:"+rt.totalMemory());
System.out.println("JVM空闲内存数:"+rt.freeMemory());
System.out.println("JVM可用最大内存数:"+rt.maxMemory());try {rt.exec("notepad"); //调用其他的应用程序
} catch (IOException e) {e.printStackTrace();
}

  

Random:

生成随机数

import java.util.Random;
public class Demo {public static void main(String[] args){Random r = new Random();//如果给一个固定的数字,则生成的随机数不变System.out.print(r.nextInt(50));   //不包含50}
}

  

Scanner:

键盘输入

//类似 python 中的 input
import java.util.Scanner;;
public class Demo {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("输入一个整数")int x = input.nextInt();    //input.next()  输入一个字符串System.out.println(x);  //0
}
}

  

Arrays:  

二分法查找

import java.util.Arrays;
public class Demo {public static void main(String[] args){int[] num = {1,2,3,4};int index = Arrays.binarySearch(num, 4); //使用这个方法之前必须手动对数据进行排序。否则可能返回(-2):表示为找到System.out.println(index);}
}

原样返回一个数组

import java.util.Arrays;
public class Demo {public static void main(String[] args){int[] num = {1,2,3,4};System.out.println(Arrays.toString(num));}
}

快速排序

comparable:可以实现自定义排序

import java.util.Arrays;
public class Demo {public static void main(String[] args){int[] num = {1,5,2,3,4};Arrays.sort(num);System.out.println(Arrays.toString(num));}
}

数组的copy

import java.util.Arrays;
public class Demo {public static void main(String[] args){int[] num = {1,5,2,3,4};int[] num1 = Arrays.copyOf(num, 8); //实现方式为System.arraycopySystem.out.println(Arrays.toString(num1));  //[1, 5, 2, 3, 4, 0, 0, 0]num = Arrays.copyOf(num, 3);System.out.println(Arrays.toString(num));  //[1, 5, 2]}
}

使用System.arraycopy 进行数组的复制

import java.util.Arrays;
public class Demo {public static void main(String[] args){int[] num1 = {1,2,3};int[] num2 = new int[num1.length];System.arraycopy(num1, 0, num2, 0, num1.length);System.out.print(Arrays.toString(num2));}
}

判断两个数组是否相等

import java.util.Arrays;
public class Demo {public static void main(String[] args){int[] num1 = {1,2,3};int[] num2 = {2,3};System.out.println(Arrays.equals(num1, num2));}
}

填充数组

import java.util.Arrays;
public class Demo {public static void main(String[] args){int[] num1 = {1,2,3};Arrays.fill(num1, 0);System.out.println(Arrays.toString(num1));}
}

  

MessageFormat:

格式化文本

import java.text.MessageFormat;
public class Demo {public static void main(String[] args) {String s = "欢迎{0}";s  =MessageFormat.format(s, "小明");System.out.println(s);    }
}

String.format

public class T {public static void main(String[] args) {test();}public static void test(){String s = "xx%s";String str = String.format(s, "sdf");System.out.println(str);}
}

  

Math:

import static java.lang.Math.floor;  //静态导入
public class Demo {public static void main(String[] args) {System.out.println(Math.abs(-1)); //去绝对值System.out.println(Math.random());//取(0,1)的double数System.out.println(Math.round((Math.random()*100)));//将一个double数取整System.out.println(Math.sqrt(2));//取根号2;System.out.println(Math.round(1.5));//2System.out.println(floor(1.5));//1.0}
}

 

日期:

SimpleDateFormat 使用

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {public static void main(String[] args) {DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS");String s = df.format(new Date());//String s = df.format(343423);System.out.println(s);}
}    

calendar使用

import java.util.Calendar;
public class Demo {public static void main(String[] args) {Calendar c = Calendar.getInstance();int year = c.get(Calendar.YEAR);int day = c.get(Calendar.DAY_OF_MONTH);int day1 = c.get(Calendar.DAY_OF_YEAR);System.out.println(year+","+day+","+day1);}
}

Date 使用

import java.util.Date;
public class Demo {public static void main(String[] args) {Date d = new Date();System.out.println(d);  //Thu Apr 11 14:07:40 CST 2019}
}

  

Comparable:

使用Comparable接口实现对象之间排序

package com.zy;
import java.util.Arrays;
public class Demo {public static void main(String[] args) {Dog[] dog = {new Dog("花花",40),new Dog("天天",20)};Arrays.sort(dog);System.out.println(Arrays.toString(dog));}
}class Dog implements Comparable<Dog>{private String name;private int age;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog [name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(Dog o) {// TODO Auto-generated method stubreturn this.age-o.age;}
}

如果对源码不修改的话使用:Comparator接口

package com.zy;
import java.util.Arrays;
import java.util.Comparator;
public class Demo {public static void main(String[] args) {Dog[] dog = {new Dog("花花",40),new Dog("天天",20)};Arrays.sort(dog,new DogComparator());System.out.println(Arrays.toString(dog));}
}class Dog{private String name;private int age;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog [name=" + name + ", age=" + age + "]";}public int getAge() {return age;}
}class DogComparator implements Comparator<Dog>{@Overridepublic int compare(Dog o1, Dog o2) {return o1.getAge()-o2.getAge();}}

  

cloneable接口:

对象的克隆

import java.util.Arrays;
import java.util.Comparator;
public class Demo {public static void main(String[] args) {Dog dog1 = new Dog("花花",10);try {Dog dog2 = (Dog) dog1.clone();System.out.println(dog1);System.out.println(dog2);} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}class Dog implements Cloneable{private String name;private int age;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog [name=" + name + ", age=" + age + "]";}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

  

数字处理:

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
public class Demo {public static void main(String[] args) {//大整数运算String v1 = "8242343242343";String v2 = "3242432424342";BigInteger b1 = new BigInteger(v1);BigInteger b2 = new BigInteger(v2);System.out.println(b1.add(b2));System.out.println(b1.subtract(b2));   //减法System.out.println(b1.multiply(b2));System.out.println(b1.divide(b2));     //取余(/)System.out.println(b1.remainder(b2));  //取模(%)System.out.println(Arrays.toString(b1.divideAndRemainder(b2))); //返回一个数组//小数运算String v3 = "713.123213123";String v4 = "2";BigDecimal b3 = new BigDecimal(v3); BigDecimal b4 = new BigDecimal(v4);System.out.println(b3.add(b4));System.out.println(b3.subtract(b4));   //减法System.out.println(b3.multiply(b4));System.out.println(b3.divide(b4));     //取余(/)可能会报错。原因除不尽}
}

数字格式化

import java.text.DecimalFormat;
public class Demo {public static void main(String[] args) {double x = 423.64634324;//测试结果 #和0 的结果一样System.out.println(new DecimalFormat("0").format(x));    //424; 取整数(四舍五入)System.out.println(new DecimalFormat("0.00").format(x)); //42364.63;保留两位有效数字(四舍五入)System.out.println(new DecimalFormat("0.00%").format(x)); //42364.63%System.out.println(new DecimalFormat("#").format(x));    //424;保留全部整数,和0效果一样System.out.println(new DecimalFormat("#.##").format(x)); //42364.63System.out.println(new DecimalFormat("#.##%").format(x)); //42364.63%//区别System.out.println(new DecimalFormat("000000").format(x));    //000424System.out.println(new DecimalFormat("######").format(x));    //424long t = 2324324;System.out.println(new DecimalFormat("000,000").format(t)); //2,324,324System.out.println(new DecimalFormat("###,###").format(t)); //2,324,324}
}

  

MD5加密:

需要配合Base64使用,加密成Base64字符串格式

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class Demo {public static void main(String[] args) {try {MessageDigest md = MessageDigest.getInstance("MD5");String password = "qwert";byte[] bytes = md.digest(password.getBytes());   //md5加密后变成了数组的格式String str = Base64.getEncoder().encodeToString(bytes);//通过Base64加密成字符串System.out.println(str);  //o4S2Rj/CFqX47LZnD4ZFag==} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}
}

生成哈希值

public class T {public static void main(String[] args) {try {MessageDigest md = MessageDigest.getInstance("MD5");md.update("sss".getBytes());// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)String s = new BigInteger(1, md.digest()).toString(16);System.out.println(s);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}
}

maven中依赖的一个jar包(具体不太清楚了)

DigestUtils.md5DigestAsHex("1111".getBytes())

jar包: http://maven.ibiblio.org/maven2/commons-codec/commons-codec/1.6/

System.out.println(DigestUtils.md5Hex("111".getBytes()))

  

lambda表达式:

lambda表达式的实现:说明了java承认函数式编程

如果需求是定义了一个接口,需要创建该接口的实现类,重写接口的方法,而lambda可以简化了这种写法

lambda 不会生成class文件

接口只能有一个(抽象方法)-->函数式接口

1.8之后默认方法可以加,静态方法可以添加

public class Demo {public static void main(String[] args) {    //无参使用Test t = ()->{System.out.println("嗨");};t.eat();//有参使用 String x 中String可以省略Test2 t2 = (String x)->{System.out.println("我是"+x);};t2.eat("小名");//待返回值Test3 t3 = ()->{System.out.println("Test3");return 10;};t3.eat();//可以简写,如果只有一句代码,就是返回值的话;直接简写即可,不能加return,如果加return必须加上{}Test3 t4 = ()->10;System.out.println(t4.eat());}
}
interface Test{public void eat();//只能有一个接口
}
interface Test2{public void eat(String x);//只能有一个接口
}
interface Test3{public int eat();//只能有一个接口
}

四大基础函数接口

函数接口,你可以理解为对一段行为的抽象,简单点说可以在方法就是将一段行为作为参数进行传递,这个行为呢,可以是一段代码,也可以是一个方法,那你可以想象在java8之前要将一段方法作为参数传递只能通过匿名内部类来实现,而且代码很难看,也很长,函数接口就是对匿名内部类的优化。
  虽然类库中的基本函数接口特别多,但其实总体可以分成四类,就好像阿拉伯数字是无限多的,但总共就10个基本数字一样,理解了这4个,其他的就都明白了。

1、Customer接口

Consumer 接口翻译过来就是消费者,顾名思义,该接口对应的方法类型为接收一个参数,没有返回值,可以通俗的理解成将这个参数'消费掉了',一般来说使用Consumer接口往往伴随着一些期望状态的改变或者事件的发生,例如最典型的forEach就是使用的Consumer接口,虽然没有任何的返回值,但是却向控制台输出了语句。

示例1:

import java.util.ArrayList;
import java.util.List;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("7");list.add("2");list.add("3");//list.forEach((String s)->{System.out.println(s);});list.forEach(s->System.out.println(s));//简写list.forEach(System.out::println);     //另一个中写法,‘::’表示调用方法,此时的调用println方法,将s传进去}
}

示例2

 public static void main(String[] args) {Consumer<String> printString = s -> System.out.println(s);printString.accept("helloWorld!");//控制台输出 helloWorld!}

2、Function接口

Function<T,R>

Funtion接口是对接受一个T类型参数,返回R类型的结果的方法的抽象,通过调用apply方法执行内容。

示例1;

public class Test {public static void main(String[] args) {functiontest();}    public static void functiontest(){String x = strToUpper("dfs", s->s.toUpperCase());    //{s.toUpperCase();}不能这样写System.out.println(x);}public static String strToUpper(String str,Function<String, String> f){return f.apply(str);}
}

示例2

public class Operation{/* 下面这个方法接受一个int类型参数a,返回a+1,符合我上面说的接受一个参数,返回一个值所以呢这个方法就符合Function接口的定义,那要怎么用呢,继续看例子
*/
public static final int addOne(int a){return a+1;
}/* 该方法第二个参数接受一个function类型的行为,然后调用apply,对a执行这段行为
*/
public static int oper(int a, Function<Integer,Integer> action){return action.apply(a);
}/* 下面调用这个oper方法,将addOne方法作为参数传递 */
pulic static void main(String[] args){int x = 1;int y = oper(x,x -> addOne(x));//这里可以换成方法引用的写法 int y = oper(x,Operation::addOne)System.out.printf("x= %d, y = %d", x, y); // 打印结果 x=1, y=2/* 当然你也可以使用lambda表达式来表示这段行为,只要保证一个参数,一个返回值就能匹配 */y = oper(x, x -> x + 3 ); // y = 4y = oper(x, x -> x * 3 ); // y = 3
}
}

Supplier接口

Supplier 接口翻译过来就是提供者,和上面的消费者相反,该接口对应的方法类型为不接受参数,但是提供一个返回值,通俗的理解为这种接口是无私的奉献者,不仅不要参数,还返回一个值,使用get()方法获得这个返回值

示例1:

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;public class Test {public static void main(String[] args) {suppliertest();}  public static void suppliertest(){List li = getNum(10, ()->(int)(Math.random()*100));li.forEach(System.out::println);}public static List<Integer> getNum(int num,Supplier<Integer> sup){List<Integer> list = new ArrayList<>();for(int i=0;i<num;i++){list.add(sup.get()); //表示执行了10次sup.get()方法 等于(int)(Math.random()*100)}return list;}
}

示例2

 Supplier<String> getInstance = () -> "HelloWorld!";System.out.println(getInstance.get());// 控偶值台输出 HelloWorld

Predicate接口

predicate<T,Boolean> 谓语接口,顾名思义,中文中的‘是’与‘不是’是中文语法的谓语,同样的该接口对应的方法为接收一个参数,返回一个Boolean类型值,多用于判断与过滤,当然你可以把他理解成特殊的Funcation<T,R>,但是为了便于区分语义,还是单独的划了一个接口,使用test()方法执行这段行为

示例1:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;public class Test {public static void main(String[] args) {predicatetest();}    public static void predicatetest(){//List<String> list = new ArrayList<>();//list.add("dd");//list.add("ddd");//list.add("ff");List<String> list = Arrays.asList("dd","ddd","ff");List<String> result = filter(list, (s)->s.contains("d"));System.out.println(result);}public static List<String> filter(List<String> list,Predicate<String> p){List<String> result = new ArrayList<>();for(String s:list){if(p.test(s)){ //测试是否符合要求; 需要有参数sresult.add(s);}}return result;}
}

示例2

public static void main(String[] args) {Predicate<Integer> predOdd = integer -> integer % 2 == 1;System.out.println(predOdd.test(5));//控制台输出 true}  

关于lambda的限制

Java8中的lambda表达式,并不是完全闭包,lambda表达式对值封闭,不对变量封闭。简单点来说就是局部变量在lambda表达式中如果要使用,必须是声明final类型或者是隐式的final例如

int num = 123;
Consumer<Integer> print = () -> System.out.println(num);

就是可以的,虽然num没有被声明为final,但从整体来看,他和final类型的变量的表现是一致的,可如果是这样的代码

int num = 123;
num ++;
Consumer<Integer> print = () -> System.out.println(num);

则无法通过编译器,这就是对值封闭(也就是栈上的变量封闭)
如果上文中的num是实例变量或者是静态变量就没有这个限制。
看到这里,自然而然就会有疑问为什么会这样?或者说为什么要这么设计。理由有很多,例如函数的不变性,线程安全等等等,这里我给一个简单的说明

  • 为什么局部变量会有限制而静态变量和全局变量就没有限制,因为局部变量是保存在栈上的,而众所周知,栈上的变量都隐式的表现了它们仅限于它们所在的线程,而静态变量与实例变量是保存在静态区与堆中的,而这两块区域是线程共享的,所以访问并没有问题。
  • 现在我们假设如果lambda表达式可以局部变量的情况,实例变量存储在堆中,局部变量存储在栈上,而lambda表达式是在另外一个线程中使用的,那么在访问局部变量的时候,因为线程不共享,因此lambda可能会在分配该变量的线程将这个变量收回之后,去访问该变量。所以说,Java在访问自由局部变量时,实际上是在访问它的副本,而不是访问原始变量。如果局部变量仅仅赋值一次那就没有什么区别了。
  • 严格保证这种限制会让你的代码变得无比安全,如果你学习或了解过一些经典的函数式语言的话,就会知道不变性的重要性,这也是为什么stream流可以十分方便的改成并行流的重要原因之一。

Stream接口  (1.8 之后的新特性)

import java.util.stream.Stream;public class Test {public static void main(String[] args) {Stream<String> stream = Stream.of("good","good","study","day","day","up");//foreach//stream.forEach((s)->System.out.println(s));  //结束操作,不返任何东西//filter 过滤//stream.filter(s->s.length()>3).forEach(System.out::println);//中间操作;filter返回一个stream;//distinct//stream.distinct().forEach(System.out::println); //去重,中间操作//map,实现了Function接口,Function接口是需要传递一个函数;每一个元素都需要执行这个函数;然后生成一个新的集合//stream.map((s)->s.toUpperCase()).forEach(System.out::println);//reduce,steam中的两个元素进行操作//Optional<String> op = stream.reduce((s1,s2)->s1.length()>s2.length()?s1:s2);//Optional<String> op = stream.reduce((s1,s2)->s1+s2);//System.out.println(op.get());//collect 将stream转化成数组;//List<String> list = stream.collect(Collectors.toList());//list.forEach(System.out::println);//flatMap可以合并多和流;//Stream<List<Integer>> ss = Stream.of(Arrays.asList(1,2,3),Arrays.asList(4,5));//ss.flatMap(list->list.stream()).forEach(System.out::println);}
}

@FunctionalInterface函数式接口注解

1、该注解只能标记在”有且仅有一个抽象方法”的接口上。

2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。

3、接口默认继承Java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。

4、该注解不是必须的,如果一个接口符合”函数式接口”定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。

// 正确的函数式接口
@FunctionalInterface
public interface TestInterface {  // 抽象方法  public void sub();  // java.lang.Object中的方法不是抽象方法  public boolean equals(Object var1);  // default不是抽象方法  public default void defaultMethod(){  }  // static不是抽象方法  public static void staticMethod(){  }
}

  

RandomAccessFile:

只可以对文件进行操作,当模式为r,文件不存在会报错,当模式为rw,文件不存在会自动创建文件,文件存在不会覆盖原文件;

对文件进行写入操作是,必须有r模式,只有先有读的权限,才能有写的权限(rw)

示例:复制文件

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;public class Demo {public static void main(String[] args) throws IOException{run();}public static void run(){try {RandomAccessFile rf = new RandomAccessFile("C:\\Users\\zhengyan\\Desktop\\test1\\all.jpg", "r");RandomAccessFile wf = new RandomAccessFile("C:\\Users\\zhengyan\\Desktop\\test1\\new_all.jpg", "rw");byte bytes[] = new byte[1024];int len=-1;while((len=rf.read(bytes))!=-1){wf.write(bytes,0,len);}System.out.println("复制成功");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

  

Properties:

使用环境:当代码已经上传的服务器后,如果需要对参数进行修改,而不需要对源代码重新编译,就会利用到配置文件,对配置文件进行修改,是不需要对源代码重新编译的

源代码--->编译(.class文件)--->打包上传到服务器  

1、创建config.properties配置文件

username=admin
password=123

2、代码

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;public class Demo {private static String username;private static String password;public static void main(String[] args) throws IOException{readConfig();System.out.println(Demo.username);System.out.println(Demo.password);writeConfig("小明", "123456");//对配置文件写入操作readConfig();System.out.println(Demo.username);System.out.println(Demo.password);}public static void readConfig(){Properties p = new Properties();try {//InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com\\zy\\config.properties"); //是有问题的InputStream inStream = new FileInputStream("src\\com\\zy\\config.properties");p.load(inStream);username = p.getProperty("username");password = p.getProperty("password");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void writeConfig(String username,String password){Properties p = new Properties();p.put("username", username);p.put("password", password);try {OutputStream out = new FileOutputStream("src\\com\\zy\\config.properties");p.store(out, "updata config");  //updata config是描述信息out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

  

StringUtils:

需要引入这个jar包

isBlank:“   ”:false

isEmpty:“  ” :true

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId>
</dependency>

  

转载于:https://www.cnblogs.com/yanxiaoge/p/10650926.html

java----java工具包相关推荐

  1. 2017可以兼容那些jdk_2019从头跃——核心基础:何为JDK?Java开发工具包须知总览...

    摘要:JDK是构建Java应用程序的关键平台组件. 其核心是Java编译器. 1.导引 Java Development Kit(JDK)是Java编程中使用的三个核心技术包之一,相伴随的另两个是JV ...

  2. java开发可重用代码包工具包_[Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置...

    [Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置 0 2021-01-04 04:00:04 安装并配置JDK环境变量,不但要知道怎样做,也要知道为什么这样做,知其然知其所以然. ...

  3. 此安装程序必须使用 java 开发工具包 (jdk) 执行_彻底搞懂Java开发工具包(JDK)安装及环境变量配置...

    [官方正版]java jdk 9学习笔记 78.4元 包邮 (需用券) 去购买 > 一.Java 和 JDK 是什么 Java:Java是一种优秀的程序设计语言,它有非常多的语言特性,如简单性. ...

  4. java apache commons_Apache commons(Java常用工具包)简介

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...

  5. 【Java基础1】Java开发工具包JDK

    文章目录 JavaSE.JDK和JRE有什么区别? Java包的主要内容有哪些? JDK和OpenJDK有什么区别? JavaSE.JDK和JRE有什么区别?   Java Development K ...

  6. java项目中没有jdk包_彻底搞懂Java开发工具包(JDK)安装及环境变量配置

    一.Java 和 JDK 是什么 Java:Java是一种优秀的程序设计语言,它有非常多的语言特性,如简单性.面向对象.可移植性等.Java 并不只是一种语言,而是一个完整的平台,它有一个庞大的库,其 ...

  7. java开发工具包 jdk_什么是JDK? Java开发工具包简介

    java开发工具包 jdk Java开发工具包(JDK)与JVM(Java虚拟机)和JRE(Java运行时环境)一起是Java编程中使用的三个核心技术软件包之一. 重要的是要区分这三种技术,并了解它们 ...

  8. 【解决】Java开发工具包(JDK)目录未设置或无效。请在“首选项“>“外部工具“中将其修复

    游戏引擎:Unity 版本:2019.4.6f1 [2017版本以上均可] 编译平台:Visual Studio 2019 问题截图 问题描述 Java开发工具包目录未设置或无效.请在"首选 ...

  9. 初学Java--JDK(java development kit java 开发工具包)的下载与安装教程

    初学Java–JDK(java development kit java 开发工具包)的下载与安装教程 1. 下载安装包 点开链接可以找到JDK的版本安装界面 可以看到如下图所示的界面: 下面是我选择 ...

  10. Java反射工具包reflections

    文章目录 1. 简介 2. maven 3. 配置 4. 通过类型扫描 5. 通过注解扫描 6. 方法相关 7. 工具类 8. 资料文档 1. 简介 reflections是一个Java反射工具包,使 ...

最新文章

  1. .NET4.0并行计算技术基础(8)
  2. 消息中间件—RocketMQ的RPC通信(二
  3. 【组合数学】生成函数 ( 生成函数示例 | 给定通项公式求生成函数 | 给定生成函数求通项公式 )
  4. 如何在Ubuntu 14.04中使用Samba共享文件
  5. 系统相机裁剪比例_从单反到手机,三种黄金比例构图方法,让你的照片与众不同...
  6. 针对新手的Java EE7和Maven项目–第5部分–使用Arquillian / Wildfly 8进行单元测试
  7. Eclipse无法查看Servlet源代码的解决方案
  8. 已知s=1×2×3×…×n,计算出s不大于5000时n的最大值。
  9. 基于FFmpeg的Qt视频播放器
  10. 多选框取值和默认勾选
  11. 发布一款小软件:和讯博客助手-新闻采集测试版- 0.2.0
  12. 2014,为了梦想宁愿破釜沉舟
  13. jquery省份城市联动选择下拉框
  14. 视频播放–AVPlayer
  15. 台式计算机的主流配置,台式机主流配置型号参数
  16. linux系统编程之网络编程
  17. c语言程序学生籍贯信息记录,C语言程序设计学生籍贯信息记录簿
  18. 数据结构之完全二叉树
  19. 学习笔记69—金蝶财务软件安装教程(KIS12.3,win10)
  20. 计算机应用设计大赛获奖信息,北京大学第六届“计算机应用设计大赛”圆满落幕...

热门文章

  1. gorm查询降序排列
  2. linux diff diffstat组合使用示例
  3. Hadoop集群添加新节点正确操作步骤
  4. Oracle不带传出参数的存储过程创建及调用
  5. 安装python的twisted_如何在Python3.5上安装 Twisted(为了Scrapy)
  6. 多序列比对的c语言程序,多序列比对的实际应用
  7. Spring 框架所有版本大集合下载
  8. Qt QML页面翻转控件封装
  9. 很酷的word技巧---删除行前的空格
  10. NFS mount failed, reason given by server: Permission denied ---nfs挂载失败