学习一些Java常用的API


Math:包含执行基本数字运算的方法

如果没有构造方法,一般类的成员都是静态的,通过类名可以直接调用

Java中有两种random函数,Math.Random()函数能够返回带正号的double值,该值≥0<1,注意这里是小于1不能取等号

Random函数中的Random,可以是无参构造,也可以是带参构造(种子),且方法中的形参是上限

import java.util.Random;

public class demo2 {
public static void main(String[] args) {
Random ran1 = new Random(10);
System.out.println("使用种子为10的Random对象生成[0,10)内随机整数序列: ");
for (int i = 0; i < 10; i++) {
System.out.print(ran1.nextInt(10) + " ");
}
System.out.println();
Random ran2 = new Random(10);
System.out.println("使用另一个种子为10的Random对象生成[0,10)内随机整数序列: ");
for (int i = 0; i < 10; i++) {
System.out.print(ran2.nextInt(10) + " ");
}
}
}
使用种子为10的Random对象生成[0,10)内随机整数序列:
3 0 3 0 6 6 7 8 1 4
使用另一个种子为10的Random对象生成[0,10)内随机整数序列:
3 0 3 0 6 6 7 8 1 4

System中主要注意以下两个函数:

exitcurrentTimeMills

public class demo1 {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis()*1.0/1000/3600/24/365);
long start = System.currentTimeMillis();
for(int i = 0;i<1000;i++){
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("-----------");
System.out.println("运行1000次输出需要的时间是:"+(end-start)+"ms");
System.exit(0);
System.out.println(System.currentTimeMillis());
}
}

Object类:是类层次结构的根,每个类都可以将Object作为超类,所有类都直接或间接继承该类

public String toString()

返回对象的字符串表示形式。总的来说,这 toString方法返回一个字符串,“以文本方式表示”这个对象。其结果应该是一个简洁,但翔实的代表性,是一个容易阅读的人。建议所有子类都重写此方法。

Object类的toString方法返回一个包含该类的对象是一个实例的名称字符串的符号` @ ',和符号进制表示的对象的哈希码。换句话说,此方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

结果

对象的字符串表示形式。

public class Student {
private int age;
private String name; public Student() {
} public Student(int age, String name) {
this.age = age;
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
/*
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
*/
}
public class Demo {
public static void main(String[] args) {
Student st = new Student(18,"林青霞");
/*
public void println(Object x) {
String s = String.valueOf(x);
if (getClass() == PrintStream.class) {
// need to apply String.valueOf again since first invocation
// might return null
writeln(String.valueOf(s));
} else {
synchronized (this) {
print(s);
newLine();
}
}
}
*/ /*
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
*/ /*
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*/ System.out.println(st);
// Student@4eec7777
// Student{age=18, name='林青霞'}
}
}

在Student类中如果不重写toString方法,输出结果会比较难阅读,输出了Student@4eec7777,而如果重写了toString方法,则输出Student{age=18, name='林青霞'}

Object类中还有一个常用方法,是equals,之前在学习String的时候也学习了equals方法,当时理解的是==比较两者的地址值,而equals比较两者的值,但是Object中的equals却有些不同

// Student类见上
public class Demo3 {
public static void main(String[] args) {
Student st1 = new Student(20,"林青霞");
Student st2 = new Student(20,"林青霞");
/*
public boolean equals(Object obj) {
return (this == obj);
}
*/
System.out.println(st1.equals(st2));
}
} // false

这里明明用equals,但是却输出了false,是因为Object中的equals见上方注释,还是用==进行比较

在IDEA中重写toString方法和equals方法很简单,使用Alt+Insert,然后找到要添加的方法即可

getClass()返回对象的类的信息

冒泡排序:

public class demo1 {
public static void main(String[] args) {
int [] arr = {54,32,88,12,90,75,81};
arrToString(arr);
BubbleSort(arr);
arrToString(arr);
}
public static void BubbleSort(int [] array){
for(int i = 1;i<array.length-1;i++){
for(int j = 0;j<array.length-i;j++){
if(array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
public static void arrToString(int [] array){
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i = 0;i<array.length;i++){
if(i==array.length){
sb.append(array[i]);
}else{
sb.append(array[i]).append(", ");
}
}
sb.append("]");
String ss = sb.toString();
System.out.println(ss);
}
}

上述较复杂的过程,可用Arrays中的toString方法和sort方法实现

Arrays类包含用于操作数组的各种方法:

  • toString返回指定数组的内容的字符串表示形式
  • sort按照数字顺序排列指定的数组
// 使用Alt+Insert重写了equals方法,然后查看Arrays的equals方法使用
public class Student {
private int age;
private String name; public Student() {
} public Student(int age, String name) {
this.age = age;
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
}
import java.util.Arrays;

public class ArraysDemo {
public static void main(String[] args) {
Student st1 = new Student(18,"林青霞");
Student st2 = new Student(18,"林青霞");
Student st3 = new Student(19,"kkk");
Student [] s1 = {st1};
Student [] s2 = {st2};
System.out.println(Arrays.equals(s1,s2));
}
}
// 如果不重写equals,那么输出false
// 重写了equals,输出true

Arrays是一个工具类,设计思想为:

  • 构造方法用private修饰(不让外界创建类)
  • 成员用public static修饰(可以让外界直接调用静态方法)

基本数据类型包装类:

  • 产生:基本数据类型使用不需要创建对象,但是集合的操作时需要将基本数据转化为对象
  • 常用:BooleanCharacterIntegerByteShortLongFloatDouble
  • 再次强调,String不属于基本数据类型,是一个类,属于引用数据类型
  • 提供:字符串、基本数据类型、对象之间相互转化的方式
  • 属性:最大值、最小值
  • 好处:将基本数据类型封装成对象的好处在于可以在对象中定义更多功能方法操作该数据(基本数据类型与字符串之间的转换)
public class IntegerDemo {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
Integer i1 = new Integer(100);
System.out.println(i1);
Integer i2 = Integer.valueOf(101);
System.out.println(i2);
// 报错
// Integer i3 = Integer.valueOf("abc");
// System.out.println(i3);
}
}

Integer首先掌握构造方法,直接new Integer的方法已过时,现在一般用valueOf方法

intIntegerString转换好好研究一下,其他的用到再说

  • int到Integer:使用Integer的静态函数valueOf
  • String到Integer:使用Integer的静态函数valueOf
  • Integer到int:调用intValue方法(非静态,不要搞错了)
  • String到int:方法一使用Integer的静态方法ParseInt,方法二先使用Integer的静态方法valueOf,再调用intValue
  • int到String:使用String的静态方法valueOf
  • Integer到String:使用String的静态方法valueOf
public class IntegerDemo2 {
public static void main(String[] args) {
String s1 = "100";
int n1 = 101;
Integer it1 = Integer.valueOf(102);
System.out.println("String:"+s1);
System.out.println("int:"+n1);
System.out.println("Integer:"+it1); // String转int
int n2 = Integer.parseInt(s1);
System.out.println("将String转int:"+n2);
// Integer转int
int n3 = it1.intValue();
System.out.println("将Integer转int"+n3);
int n4 = Integer.valueOf(s1).intValue();
System.out.println("将String先转Integer再转int"+n4); // int转Integer
Integer it2 = Integer.valueOf(n1);
System.out.println("将int转Integer"+it2);
// String转Integer
Integer it3 = Integer.valueOf(s1);
System.out.println("将String转Integer"+it3); // int转String
String s2 = String.valueOf(n1);
System.out.println("将int转String:"+s2);
// Integer转String
String s3 = String.valueOf(it1);
System.out.println("将Integer转String:"+s3);
}
}

在练习将字符串转换成字符串数组再排序的过程中,又加深了一点数组的理解,记录下来

import java.util.Arrays;

public class Demo {
public static void main(String[] args) {
String s = "91 27 46 38 50";
/*
String[] s1 = s.split("");
for(int i = 0;i<s1.length;i++){
System.out.println(s1[i]);
}
*/
String[] s1 = s.split(" ");
int [] intArr = new int[s1.length];
for(int i = 0;i<intArr.length;i++){
intArr[i] = Integer.parseInt(s1[i]);
}
Arrays.sort(intArr);
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i = 0;i<intArr.length;i++){
if(i==intArr.length-1){
sb.append(intArr[i]);
}else{
sb.append(intArr[i]).append(", ");
}
}
sb.append("]");
String string = sb.toString();
System.out.println(string);
}
}
public class RegDemo {
public static void main(String[] args) {
String s = "abc student 'ijk' sklearn pytorch";
String[] strings = s.split("\\s+");
for(int i=0;i<strings.length;i++){
System.out.println(strings[i]);
}
}
} /*
abc
student
'ijk'
sklearn
pytorch
*/

数组元素可以不是基本类型,可以是引用类型,并且数组一旦创建就不可改变(是的,本身内容是不可以改变,但是指向是可以改变的)

而且,除了基本类型数据可以创建数组,引用类型数据也可以

public class Student {
private int age;
private String name; public Student() {
} public Student(int age, String name) {
this.age = age;
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
} }
public class Test {
public static void main(String[] args) {
int [] arr = {1,2,3,4,5,6};
arr[1] = 4;
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
Student st1 = new Student(18,"林青霞");
Student st2 = new Student(10,"张曼玉");
Student st3 = new Student();
st3.setAge(40);
st3.setName("王祖贤");
Student [] st = {st1,st2};
st[1] = st3;
for(int i = 0;i<st.length;i++){
System.out.println(st[i]);
}
}
}

也即原来的那块空间对应的内容不会变,但是指向了新的地址,对应新的内容

装箱:把基本数据类型转换为对应的包装类类型

拆箱:把包装类类型转换为对应的基本数据类型

public class Boxing_Demo {
public static void main(String[] args) {
// 自动装箱
Integer i1 = 100;
System.out.println(i1);
// 自动拆箱再装箱
i1 += 100;
// i1 = i1.intValue()+200
System.out.println(i1);
// 如果是null,在调用intValue时则报错
// NullPointerException
Integer i2 = null;
if(i2 != null){
i2 += 100;
}
}
}

使用包装类型时,如果做操作,最好判断是否为null

推荐只要是对象,在使用前就必须进行判断是否为null

Date大多方法已过时,这里掌握两个主要方法,一个无参构造,展示当前时间,一个带参构造,传入参数时间,返回1970年1月1日0时0分0秒加上该时间后的时间

import java.util.Date;

public class DateDemo {
public static void main(String[] args) {
// Date的无参构造方法
Date d1 = new Date();
System.out.println(d1);
// Date的带参构造方法
Date d2 = new Date(1000);
System.out.println(d2);
}
}

Date常用方法为getTime和setTime方法,比较简单

SimpleDateFormat是格式和语言环境敏感的方法解析一个类的具体日期,重点学习日期格式化和解析

主要掌握年月日时分秒,无参构造和带参构造方法,以及格式化和解析

  • 年:y
  • 月:M
  • 日:d
  • 时:H
  • 分:m
  • 秒:s

无参构造:SimpleDateFormat() 使用默认格式

带参构造:SimpleDateFormat(String pattern) 使用给定格式

格式化和解析:使用format和parse方法

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
// 直接输出util包下的Date结果,不利于阅读
Date d1 = new Date();
System.out.println(d1);
// 现在使用SimpleDateFormat方法
// 无参构造方法
// SimpleDateFormat sdf = new SimpleDateFormat();
// 带参构造方法
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// 使用format格式化得到字符串
String format = sdf.format(d1);
System.out.println(format);
// 解析字符串生成时间
String s = "2022-01-01 00:00:00";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parse = sdf2.parse(s);
System.out.println(parse);
}
}

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; public class DateUtils {
public String dateToString(Date date,String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
String format1 = sdf.format(date);
return format1;
}
public Date stringToDate(String s,String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date parse = sdf.parse(s);
return parse;
}
}
import java.text.ParseException;
import java.util.Date; public class Demo {
public static void main(String[] args) throws ParseException {
DateUtils du = new DateUtils();
Date d1 = new Date(1000);
String format = "yyyy年MM月dd日 HH:mm:ss";
String s1 = du.dateToString(d1, format);
System.out.println(s1);
System.out.println("-------");
String s2 = "2022年01月01日 12:12:12";
Date date = du.stringToDate(s2, format);
System.out.println(date);
}
}

黑马视频中明确写了这是一个工具类,工具类该有的特点是:

  • 构造方法私有,这样外界就无法创建该类的对象
  • 成员方法静态,这样可以通过类直接调用

Calendar:抽象类,为特定瞬间和一套calendar fields如YEAR、MONTH、DAY_OF_MONTH,HOUR之间的转换提供了方法

Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化

import java.util.Calendar;

public class Calendar_demo {
public static void main(String[] args) {
// 获取当前日历对象
Calendar instance = Calendar.getInstance();
System.out.println(instance);
// Calendar是抽象类,设置了领域来获取年月日星期月份等
// 但是这些也都是静态的
System.out.println(instance.get(Calendar.DATE));
System.out.println(instance.get(Calendar.YEAR));
System.out.println(instance.get(Calendar.MONTH));
System.out.println("----------");
instance.add(Calendar.YEAR,1);
instance.add(Calendar.MONTH,2);
System.out.println(instance.get(Calendar.YEAR));
System.out.println(instance.get(Calendar.MONTH));
System.out.println("----------");
instance.set(2022,1,1);
System.out.println(instance.get(Calendar.MONTH));
}
}

Calendar常用方法:get、set和add

要注意Calendar是抽象类,用getInstance实例化,再用get领域内容得到属性值

// Calendar的应用
import java.util.Calendar;
import java.util.Scanner; public class Demo {
public static void main(String[] args) {
System.out.println("请输入年份:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
Calendar c = Calendar.getInstance();
c.set(year,2,1);
// System.out.println(c.get(Calendar.MONTH));
// System.out.println(c.get(Calendar.YEAR));
// System.out.println(c.get(Calendar.DATE));
c.add(Calendar.DATE,-1);
int date = c.get(Calendar.DATE);
System.out.println(year+"年的二月份有"+date+"天");
}
}

Java学习笔记-基础语法Ⅴ的更多相关文章

  1. Java学习笔记-基础语法Ⅳ

    多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...

  2. Java学习笔记-基础语法

    Java基础包含关键字,标识符,注释,常量和变量,运算符 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 Java的关键字 用于定义数据类型的关键 ...

  3. Java学习笔记-基础语法Ⅹ-进程线程

    学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...

  4. Java学习笔记-基础语法Ⅷ-泛型、Map

    泛型 泛型本质上是参数化类型,也就是说所操作的数据类型被指定为一个参数,即将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型,这种参数类型可以用在类.方法和接口中,分别为泛型类.泛型方法 ...

  5. JAVA 学习笔记 - 基础语法 2

    ---恢复内容开始--- 1.数组的申明和应用 数据类型 数组名称[] = null;             //在堆栈中申明变量名称 数组名称 =  new  数据类型[10];       // ...

  6. JAVA 学习笔记 - 基础语法1

    1. 类的定义 public class  与  class的区别 一个java文件只有一个public class, 而且类名必须与文件名一致. 一个java文件可以有多个class定义,javac ...

  7. Java学习笔记-基础语法ⅩⅠ-UDP、TCP

    网络编程 三要素:IP地址.端口.协议 IP地址:使用ipconfig查看,如果装了VM的话,会有VMnet1.VMnet8和WLAN,net1不能从虚拟机到主机,net8不能从主机到虚拟机,net0 ...

  8. Java学习笔记-基础语法Ⅸ-文件

    File File是文件和路径名的抽象表示,File封装的并不是一个真正存在的文件,是一个路径名,可以存在也可以不存在 常用方法: 创建文件:createNewFile() 创建目录:mkdir() ...

  9. Java学习笔记-基础语法Ⅶ-集合

    集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...

随机推荐

  1. HTML 5中的本地存储概念?

    很多时候,我们想在本地计算机存储有关用户的信息.例如,假设用户已经填满了一半的长表单,互联网却突然连接中断.此时,用户希望能在本地存储这些信息,然后当重新连接到互联网的时候,获取这些信息,并将其发送到 ...

  2. Windows常用快捷操作

    Windows操作系统作为目前最广泛使用的PC端OS,掌握一些快捷键,方便快速在Windows系统下进行操作. 下面收集整理了一些常用的快捷操作: Ctrl + A   全选 Ctrl + C   复 ...

  3. 顺利通过EMC实验(5)

  4. 《css揭秘》读书笔记

    第一章 引言 css编码技巧 在引言中,作者提到使用em与inherit来实现css代码的简洁与可维护性.但是根据本司机两年的开发经验来看,在实际开发中很少来使用em这个单位.如何用以及何时去使用,还 ...

  5. 云集,让 web app 像 native app 那样运行(雄起吧,Web 开发者)

    让 web app 像 native app 那样运行 云集是一个轻应用(即 web app)的运行环境,可以让 web app 像 native app 那样运行. just like this 这 ...

  6. 富文本编辑器CKeditor的配置和图片上传,看完不后悔

    CKeditor是一款富文本编辑器,本文将用极为简单的方式介绍一下它的使用和困扰大家很久的图片上传问题,要有耐心. 第一步:如何使用 1.官网下载https://ckeditor.com/ckedit ...

  7. 设计模式之:工厂方法模式FactoryMethodPattern的实现

    本例用到了配置文件.接口.反射.多态: 满足的设计原则: 通过工厂,实现创建对象和使用对象的分离,实现松耦合,满足迪米特法则: 通过配置文件指定创建对象类型,而不需更改源代码,满足开闭原则: 容易实现 ...

  8. 关于20组---三重奏的meet的评价

    meet这一软件是一款交友软件,新版本完善了以前版本的各种不足,而且能够通过手机号发验证码来创建新账户,功能多样,可以在星球.广场找到自己感兴趣的人,基本满足的交友需求. 但有一点不足之处,就是缺少创 ...

  9. java中方法重载是什么, 实际中到底有什么意义, 用处?请举例

    7.3 方法重载(overload)  当几个方法有相同的方法名,但参数个数不同或参数类型不同时,就涉及方法重载 方法重载有什么意义呢?在公司里编程,有时候一个方法名,要用到很多次,而且每次跟每次的参 ...

  10. Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 报错及解决办法

    亲测Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 解决办法 - 程序员大本营 ...