java学习之高级语法(一)----- 常用API

简介: java学习之高级语法(一)----- 常用API


API
▶  API:Application Programming Interface 应用程序编程接口

▶  Java API是一本程序员的“ 字典 ”,是JDK中提供的使用类的说明文档。类将底层的代码实现封装了起来,我们不需要关系类是怎么实现的,只需要学习怎么使用这些类即可。所以通过查询API就可以知道怎么使用它们。

▶  在使用API查找到你想要的某个类时,需要关注以下几个部分:

   (1)看包 :看是否需要导包【注意:如果一个类是属于java.lang包下则不需要导包,其他需  要导包】

   (2)看类的解释和说明

   (3)学习构造方法

   (4)使用成员方法

Scanner类
▶  Scanner类的功能:可以实现键盘输入数据到程序当中

使用上面这段代码可以实现键盘输入,这里的System.in 目前可以看成是固定写法记住,System.in系统输入指的是通过键盘录入数据。

▶  引用类型的一般使用步骤:

(1) 导包

          import  包名 . 类名称

     【 如果需要使用的目标类和当前类位于同一个包下,则可以省略导包语句不写。只有Java.lang包下的内容不需要导包,其他的包都需要import语句 】

(2)创建

         类名称  对象名 = new 类名称() ;

(3)使用

        对象名.成员方法( ) ;

        获取键盘输入的一个int数字:int num = sc.nextInt();

        获取键盘输入的一个字符串:String str = sc.next(); 

-----  例:键盘输入三个int数字,然后求出其中的最大值

import java.util.Scanner;

public class Demo03ScannerMax {

public static void main(String[] args) {
    // 创建Scanner类的对象
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入第一个数字:");
    int a = sc.nextInt();
    System.out.println("请输入第二个数字:");
    int b = sc.nextInt();
    System.out.println("请输入第三个数字:");
    int c = sc.nextInt();
    
    // 用三元运算符
    int temp = a>b?a:b ;
    int max = temp>c?temp:c;
    System.out.println("最大值为:"+max);
    
    
}

}
【  这里用三元运算符更简单一些,也可以用 if 语句来判断  】

匿名对象(了解)
▶  匿名对象的概念

之前创建对象的标准格式 :   类名称  对象名称 = new 类名称() ;

匿名对象就是创建对象时,只有右边的对象,没有左边的名字和运算符,虽然是创建对象的简化写法,但是应用场景非常有限。

匿名对象创建格式:    new 类名称() ; 

▶  匿名对象的应用

(1)创建匿名对象直接调用方法,没有变量名。

new Scanner(System.in).nextInt();
(2)一旦调用两次方法就是创建了两个对象,造成浪费。

new Scanner(System.in).nextInt();
new Scanner(System.in).nextInt();
   【  注意:匿名对象只能使用唯一的一次,下次使用必须再创建一个新的对象 】

   【 使用建议:如果确定有一个对象只需要使用唯一的一次,则可以用匿名对象 】

(3)匿名对象可以作为方法的参数和返回值

import java.util.Scanner;

public class Demo01 {

public static void main(String[] args) {
    
    // 普通方法
    Scanner sc = new Scanner(System.in);
    input(sc);
    
    // 匿名对象方法
    input(new Scanner(System.in));
    

}

public static void input(Scanner sc) {
    
    System.out.println(sc);
    
}

}
Random类
▶  作用:Random类用来生成随机数字

▶  使用Random也是三个步骤:

(1)导包

        import java.util.Random ;

(2)创建

        Random r = new Random() ;  // 小括号中留空

(3)使用

        获取一个随机的int数字(范围是int所有范围,有正负两种):int num = r.nextInt() ;

        获取一个随机的int数字(参数代表了范围,左闭右开区间):int num = r.nextInt(3) ;

        这里括号里的3表示 [ 0 , 3 ) ,也就是 0~2

      ( 创建一个Random对象,每次调用nextInt()方法,都会生成一个随机数 )

// 获取 [1,n] 范围内的一个随机数
import java.util.Random
public class Demo01 {

    
   public static void main(String[] args){

           int n = 50 ;
           
           // 创建对象
           Random r = new Random() ;

           // 获取随机数
           int number = r.nextInt(n)+1 ;

           // 输出随机数
           System.out.println( "number:" + number) ;
   }

}
// 不管在学习哪种编程语言,都见过这样一个猜数字的小游戏
import java.util.Random;
import java.util.Scanner;

public class Demo02 {

public static void main(String[] args) {
    
    // 首先产生一个1-100的随机数作为答案
    Random n = new Random() ;
    int number = n.nextInt(100)+1;
    
    // 进入猜答案的循环,注意产生作为答案的数字的过程不能放在循环里面
    while(true) {
        
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要猜的数字(1-100):");
        int guessNumber = sc.nextInt();
        
        // 比较所猜数字和答案是否一致
        if( guessNumber > number) {
            
            System.out.println("大了,再猜! ");
            
        }else if(guessNumber < number) {
            
            System.out.println("小了,再猜! ");
        }else if (guessNumber == number) {
            
            System.out.println("恭喜你,猜对啦!") ;
            break ;
            
        }
    }
}

}

ArrayList集合
▶  数组的长度是固定的,无法适应数据变化的需求,但是ArrayList集合的长度是可以随意变化的,这样可以更加便捷的存储和操作对象数据。

▶  对于ArrayList来说,有一个尖括号 < E > 代表泛型

泛型:也就是装在集合当中的所有元素全都是统一的什么类型【  泛型只能是引用类型,不能是基本类型  】

注意: 对于ArrayList集合来说,直接打印得到的不是地址值,而是内容

            如果内容是空,则得到的是空的中括号 [ ]

▶  ArrayList当中的常用方法有:

  1. public boolean add(E e) :向集合中添加元素,参数的类型和泛型一致,返回值代表添加是否成功
  2. public E get(int index) :从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素
  3. public E remove(int index)  :从集合当中删除元素,参数是索引编号,返回值就是被删除掉的元素
  4. public int size() :获取集合的尺寸长度,返回值是集合中包含的元素的个数

【 数组的长度用length获取,而ArrayList集合的长度用size获取 】

【 注意:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用,但是对于其他集合来说,add添加动作不一 定成功。】

如果希望向集合ArrayList当中存储基本数据类型,必须使用基本类型对应的 “ 包装类 ” 。

基本类型 ---> 包装类(引用类型,包装类都位于java.lang包下):

从上面的表中我们可以看出只有 int 和 char 这两个基本类型的包装类型需要特别的记忆一下,其他都是把首字母变成大写。

// 存储基本类型数据的集合
import java.util.ArrayList ;
public class Demo03{

   public static void main(String[] args){

      ArrayList<Integer> list = new ArrayList<>();

      list.add(1) ;
      
      list.add(2) ;

      list.add(3) ;

      System.out.println(list) ;

   }

}
从JDK 1.5+开始,支持自动装箱、自动拆箱

自动装箱:基本类型 ----> 包装类型

自动拆箱:包装类型 ----> 基本类型

String类(字符串)
▶  java.lang.String 类代表字符串

API当中说:Java程序中所有的字符串字面值(如“abc”)都作为此类的实例实现

其实就是说:程序当中所有的双引号字符串,都是String类的对象(就算没有new,也照样是)

▶  字符串的特点:

     1. 字符串的内容永不可变

     2. 正是因为字符串不可以改变,所以字符串是可以共享使用的

String s1 = " abc " ;
String s2 = " abc " ;
// 内存中只有一个“abc”对象被创建,同时被s1和s2共享
     3. 字符串效果上相当于char[ ] 数组,但是底层原理是byte[ ] 字节数组

String str = "abc" ;

上面和下面这种形式是等价的

char[] data = { 'a' ,'b' , ' c' } ;
String str = new String(data) ;
▶  创建字符串的常见3+1种方法(3中构造方法+1种直接创建):

     1. public String() :创建一个空白字符串,不含有任何内容

     2. public String(char[ ] array) :根据字符数组的内容,来创建对应的字符串

     3. public String(byte[ ] array) :根据字节数组的内容,来创建对应的字符串

     4. String str = "Hello" ;右边直接用双引号

注意:直接写上双引号,就是字符串对象。

▶  字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。

                              双引号直接写的字符串在常量池当中,new的不在池当中。

     ---  对于基本类型来说,==是进行数值的比较

     ---  对于引用类型来说,==是进行【地址值】的比较

▶  == 是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:

(1)public boolean equals (Object obj) :参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true,否则返回false

注意:

          a. 任何对象都能够用Object进行接收

          b. equals 方法具有对称性,也就是a.equals(b) 和 b.equals(a)效果一样

          c. 如果比较双方一个是常量一个是变量 ,推荐把常量字符串写在前面。

                       推荐:“abc”.equals(str)          不推荐:str.equals("abc)

(2) public boolean equalsIgnoreCase(String str) :忽略大小写,进行内容比较

▶  String中与获取相关的常用方法有:

public int length() :获取字符串当中含有的字符的个数,拿到字符串长度

public String concat(String str) :将当前字符串和参数字符串拼接成为返回值新的字符串

public char charAt(int index):获取指定索引位置的单个字符(索引从0开始)

public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值

▶  字符串的截取方法:

public String substring(int index) :截取从参数位置一直到字符串末尾,返回新字符串

public String substring(int begin ,int end) :截取从begin开始,一直到end结束,中间的字符串

备注:[ begin , end ) 包含左边,不包含右边

▶  下面这种写法,字符串中的内容仍然是没有改变的,上面有两个字符串 “ Hello ” 和 “ Java ”。strA当中保存的是地址值,本来地址值是Hello的0x666 ,后来地址值是Java的0x999 。

▶  String 当中与转换相关的常用方法有:

public char [ ]  toCharArray() :将当前字符串拆分成为字符数组作为返回值

public byte [ ]  getBytes() :获得当前字符串底层的字节数组

public String replace(CharSequence oldString , CharSequence newString) :将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串

备注:CharSequence意思是说可以接受字符串类型。

▶  字符串的分割方法:

public String[ ] split(String regex) :按照参数的规则,将字符串切分成为若干份

注意:split方法的参数其实是一个“正则表达式” ,今后学习。现在如果按照英文句点 “ . ” 进行切分,必须写 “ \ . ”(两个反斜杠)

静态Static类
▶  一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。

     如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。

     如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它。

    【 无论是成员变量,还是成员方法,如果有了static,都推荐使用类名称进行调用。 

        静态变量:类名称 . 静态变量

        静态方法:类名称 . 静态方法() ;   】

     【  对于本类当中的静态方法,可以省略类名称。】

       对于静态方法来说,可以通过对象名进行调用(正确,但是不推荐),也可以直接通过类名称来调用(正确,推荐)

▶  注意:

   1. 静态只能直接访问静态,不能直接访问非静态 

       原因:因为在内存当中是先有静态内容,后有的非静态内容。

     【“先人不知道后人,但是后人知道先人”】

       

 2. 静态方法当中不能用this关键字

     原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。

▶  静态代码块

什么是静态代码块?定义在成员位置,使用 static 修饰的代码块 { } 

位置:类中方法外

执行:随着类的加载而执行,并且只执行一次,优先于main方法和构造方法的执行

格式:   public class Studen{

                    static {

                               // 执行语句

                     }            

              }

作用:给类变量进行初始化赋值

【 说明:static 关键字可以修饰变量、方法、代码块 。在使用的过程中目的还是想在不创建对象的情况下去调用方法。】

Arrays类(数组类)
java.util.Arrays是一个和数组相关的工具类,里面提供了大量的静态方法,用来实现数组的常见操作。

▶  public static String  toString(数组) :将参数数组变成字符串(按照默认格式:[元素1,元素2,元素3...] )

public static void main(String[] args){

        int arr = { 2,45,56,7,8,90} ;

        System.out.println(arr) ; // 打印数组,传递的参数是数组名,输出的是地址

        String s = Arrays.toString(arr) ; // 将数组内容转化为字符串

        // 静态方法在同一个类中可以直接通过方法名调用,不同类之间可以通过“ 类名称.方法名 ”调用

        System.out.println(s) ; // [2,45,56,7,8,90]

}
▶  public static void sort(数组) :按照升序默认升序(从小到大)对数组的元素进行排序

注意:

        1. 如果是数值,sort默认按照升序从小到大

        2. 如果是字符串,sort默认按照字母升序

        3. 如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持(后面会学习)

Math类(数学工具类)
java.lang.Math类是数学相关的工具类,完成与数学运算相关的操作。

Math 类所有的方法均为静态方法,并且不会创建对象,调用起来非常方便 。

public static double abs(double num) :获取绝对值(有多种重载)

public static double ceil(double num) : 向上取整

public static double floor(double num) :向下取整

public static long round(double num) : 四舍五入

Math.PI :代表近似的圆周率常量。(double)

备注:如果使用Math.ceil方法,-10.8可以变成-10.0 。注意double也是可以进行++的。

相关文章
|
21小时前
|
缓存 Java 数据库
Java并发编程学习11-任务执行演示
【5月更文挑战第4天】本篇将结合任务执行和 Executor 框架的基础知识,演示一些不同版本的任务执行Demo,并且每个版本都实现了不同程度的并发性。
16 4
Java并发编程学习11-任务执行演示
|
1天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
8 0
|
1天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
8 0
|
2天前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
5 0
|
6天前
|
Java 编译器 程序员
Java基础语法之基本语法格式
本文主要复习了Java的基础语法,包括类的定义、方法、主方法、注释和关键字等内容,旨在帮助读者巩固Java学习中的重要概念。
|
9天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第1天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的函数式编程语法,可以简化代码并提高可读性。Stream API是一种用于处理集合的新工具,可以方便地进行数据操作和转换。通过结合Lambda表达式和Stream API,我们可以更加简洁高效地编写Java代码。
|
11天前
|
存储 Java 程序员
JAVA基本语法
JAVA基本语法
17 1
|
11天前
|
算法 Java 大数据
Java从入门到精通学习报告
Java从入门到精通学习报告
19 1
|
11天前
|
消息中间件 监控 安全
【JAVAEE学习】探究Java中多线程的使用和重点及考点
【JAVAEE学习】探究Java中多线程的使用和重点及考点
|
SQL 存储 JSON
ElasticSearch 查询与 Java API 实践(下)
ElasticSearch 查询与 Java API 实践
836 0
ElasticSearch 查询与 Java API 实践(下)