day02 javaSE基本知识回顾

5java SE基本知识回顾

JDK,JRE,JVM

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9mvhPTk-1546249525603)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220711091207558.png)]

API即接口、

environment即环境、

development kit即开发者工具、

jvm即java虚拟机,相当于一种规范,可以用硬件/软件实现,相当于在所有的操作系统上模拟了一个小小的cpu用于处理java的程序,实现了一次编译到处运行。

使用IDEA开发软件

在src目录下创建新程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-phH9JNjj-1546249525605)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220711094054985.png)]

并在C(类:class)中输入class文件名:Hello

快捷键 psvm 将自动生成

public static void main(String[] args) {}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VSETmYsb-1546249525606)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220711094347366.png)]

快捷键sout将自动生成

System.out.println();

程序运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UdTu0v9a-1546249525608)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220711094720989.png)]

class文件保存在

xxx\out\production\Project

java文件保存在

xxx\src

关键字回顾

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G5gjgDhD-1546249525609)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220711095525792.png)]

有很多已经不怎么熟悉了。。。(悲)

常见面试题分析

  • 问:Path与CLASSPATH的区别

    答:Path是操作系统的环境属性,指的是可以执行命令的程序路径

  • 问:银行等需要精确业务需要?

    答:精确的比较需要用到BigDecimal(一个数学工具类),关于数值的比较尽量不要用到浮点数,因为浮点数是近似的,离散的。

  • 问:如何更快的计算出2^3?

    答:按位左移俩位(x<<2)

JAVA的起步知识点

  • java是以类为单位,所以所有的程序都必须在class定义范围内,关于class的定义有俩种形式:

    class Demo01{}
    public class Demo01{}
    

    如果在开发中类的定义使用了public class声明,那么文件名必须与该类名保持一致。

  • 在一个.java文件里可以存在多个class定义,并且在编译后会自动将不同的class保存在不同的class文件中。

  • 每次使用java命令执行一个class的时候,都会启动JVM,JVM通过classpath给出的路径加载所需要的类文件,可以通过set classpath设置类的加载路径。

  • 数据类型包括了基本数据类型与引用数据类型

    基本数据类型包括了一系列:boolean,byte,char,short,int,long,float,double等

    引用数据类型则是以一种特殊方式指向变量的实体,类似于C++中的指针,这种变量在声明时是不自动分配内存的,必须另外开辟内存空间操作。

    java基本数据类型大小

    序号数据类型大小/位可表示的数据范围
    1int32±2^31(一位符号位)
    2short16±2^15
    3long64计算方式如上
    4float32±3.4E38
    5double64±1.7E308
    6char20~65536
    7byte8-128~+127

    java中Double数据类型尾巴的D或d是可有可无的,而float类型后面必须加上F或f

  • boolean需要赋初值,否则默认等于false。[idea中会报错]

  • NOT运算在idea中并不能对int型数据等运算,会报错

  • 大于(>)小于(<)等于(==)的运算结果是boolean型

  • if-else语言格式为:

    if(boolean xxx){ something;}
    
  • &与 ; |或 ;&&短路与 ;||短路或 ;返回boolean型

  • 运算符

    ^异或(相同为0不同为1)~取反(反码)
    <<左位移>>右位移
    >>>无符号右位移|按位或
    &按位与

    无符号位移无脑前面补0,一般位移根据符号情况补0或1.

    public static void main(String[] args) {
    
            System.out.println(3^4);//0011 0100  ==> 0111(7) 相同为0不同为1
            System.out.println(3|4);//0011 0100  ==> 0111(7) 俩者重合一1则1
            System.out.println(3&4);//0011 0100  ==> 0000(0) 俩者重合全1则1
            System.out.println(4>>2);//0100向右位移2位==>0001(1)
            System.out.println(3<<2);//0011想左位移2位==>1100(12)
        }
    

    你的老朋友:三元运算符

    public static void main(String[] args) {
        int score = 88;
        String str = score>60 ? "合格了":"没有合格";
        System.out.println(str);
    }
    
  • 一个很有趣的现象

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(""+a+b);
        System.out.println(a+b+"");
    }
    

    终端:

    1020
    30

    即字符串连接符+的运算顺序是严格的从左到右;

JAVA的基本码字规范

  • 类名的每一个单词首字母要大写

    class JavaDemo01{}
    
  • JAVA的标识符不能以数字开头,也不能是保留关键字,不能有空格。

JAVA中数制的观念

public class Hello {
    public static void main(String[] args) {
        int num1 = 12;int num2 = 010;int num3 = 0x0010;
        char c1 = '\u0061';
        System.out.println(num1+"\n"+num2+"\n"+num3);
        System.out.println(c1);
    }
}

终端:(分别对应十进制,八进制0开头,十六进制0x开头,unicode转义字符)

12
8
16
a

常用转义字符:\t(制表符,类似tab形成的四个空格),\n(换行)

所有浮点型都是近似的、离散的、含有误差的、要避免使用浮点型进行数值比较

故银行业务等精确业务应该使用BigDecimal(一个数学工具类)

JAVA的选择与循环语句

if-else if-else语句:

public static void main(String[] args) {
        int num = 88;
        if (num > 100 || num < 0) {
            System.out.println("error");
        } else if (num >= 60) {
            System.out.println("good");
        } else {
            System.out.println("not good");
        }
    }

switch语句:

jdk1.5以前,switch()中只能为常量或者字符,1.5以后支持枚举类型,1.7以后支持String型

记得每个case里应有break,否则将会无条件执行符合的case语句及其下面的语句

public static void main(String[] args) {
        //原始:
        char open = '+';
        switch(open){
            case 'x':{
                System.out.println("it's X");
                break;
            }
            case  '+':{
                System.out.println("it's +");
                break;
            }
            case '-':{
                System.out.println("it's -");
                break;
            }
        }
    }
public static void main(String[] args) {
    //1.7y以后switch中的选择值可以为字符串型
    String str = "Hello";
    switch (str){
        case "nihao":{
            System.out.println("it's nihao.");break;
        }
        case "Hello":{
            System.out.println("it's Hello.");break;
        }
    }
}

while语句

方便实现累加:(1~4)

public static void main(String[] args) {
        int i=0,sum = 0;
        while (i<5){
            sum+=i++;
            System.out.println(sum);
        }
    }

do-while语句

先做,再判断

public static void main(String[] args) {
    int sum,i;
    sum = 0;i = 0;
    do {
        sum += i++;
    }while (i<5);//此处有;容易忘记
    System.out.println(sum);
}

for语句

public static void main(String[] args) {
    int sum,i;
    sum = 0;i = 0;
    for(;i<5;sum+=i++){    //标准用法应在第一个空int i = 0;
    }
    System.out.println(sum);
}

一般来说,不确定循环次数,确定循环条件用while,反之用for

foreach循环
public static void main(String[] args) {
    int[] num = {10,20,30,40,50};
    for(int x:num){
        System.out.println(x);
    }
}

将num的内容逐一赋值给x,赋完即结束。适用于数组,集合等…

continue与break

老生常谈的:break跳出该循环体,continue跳出本次循环。

Scanner方法交互

基本概念

Scanner方法需要:

import java.util.Scanner;

nextlnt():只读取int值,就是只能读取整数类型的数据,如果输入了非整型的数据(浮点型字符串等)就会报错。

nextFloat()、nextDouble()输入整数、小数都会得到true,不能用此来识别其是否为小数。

还有hasNextInt(),hasNextFloat()这些判断方法。

当你**Scanner scan=new Scanner(System.in)**时,并不接收键盘信息流,在后续的scan.next()、scan.hasNext()时才会接收信息流。

next() 与 nextLine() 区别

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。

nextLine():

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。

  • 2、可以获得空白。

容易遇到的问题

在使用nextInt(),nextDouble()等类似读入方法后,再用nextLine(),line将会直接被跳过,原因跟C++中scanf,cin吞回车是一个原理,理解为输入数据时一次性将所有数据打入键盘缓存区,然后nextint()读到空格/回车前一个有效字符为止,并不会处理该空格,回车。然后留在缓存区,顺序读取到下一个nextline()时直接从缓存区吃了上次余下的数据。不给你输入的机会。

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("please enter the number and word");
    int num1 = scan.nextInt();
    String str = scan.nextLine();
    System.out.println("num1 = "+num1+",str = "+str);
}
lease enter the number and word
110
num1 = 110,str = 

解决的方法也和C++类似,在line()前面再加一个scannner.nextline()吃掉不该存在的空格即可

int num1 = scan.nextInt();
scan.nextLine();
String str = scan.nextLine();
please enter the number and word
110
i have a dream
num1 = 110,str = i have a dream

如果是nextInt()后跟了nextFloat(),键盘输入小数,nextInt()是不会接受键盘数据的,也会遗留在缓存区。

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("please enter the number");
    int i = 0;float f = 0.0f;
    if(scan.hasNextInt()){
        System.out.println("it's intnumber "+i);
    }else{
        System.out.println("it's not intnumber");
    }
    f = scan.nextFloat();
    System.out.println("the number is "+f);

    scan.close();
}
please enter the number
10.1
it's not intnumber
the number is 10.1

进程已结束,退出代码为 0

此例f被遗留在缓存区的10.1直接补上。

数组与方法

数组基本概念

俩种声明方法:

  • int score[] = null;score = new int[3];

    前者在栈内存中保存了数组名,后者根据括号里的长度以及score类型开辟一块堆内存供数组使用。

  • int[] score = new int[3]

    因此数组变量score保存的并非是数组的实体,而是数组堆内存的参考地址。

    在数组操作中,栈内存保存的永远是数组的名称,而一个人可以有多个名字,参考C++指针

  • 数组的静态初始化:

    int score[]={0,1,2,3,4,5};

  • 二维数组的声明格式:

    int score[] [];

    score = new int[4] [3];

    或者:

    int score = new int [4] [3];

  • 二维数组的静态初始化:

    int score[] [] = {{61,62},{70,88,91},{34}}

    其中输出常用到score[0].length,是第一行的长度。

排序算法复习
  • 取得长度:

    int score[] = new int[3];

​ int length = score.length;

  • 排序(从小到大)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K6Bz3LKd-1546249525612)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220713095845910.png)]

    • 冒泡排序:

      public static void main(String[] args) {
          int[] score = {67, 51, 64, 32, 88, 94, 20, 64, 25, 75};
          //冒泡排序,从小到大
          for(int i = 0;i<score.length-1;i++){
              for(int j = 0;j<score.length-i-1;j++){
                  if (score[j] > score[j+1]){
                      int temp = score[j];
                      score[j] = score[j+1];
                      score[j+1] = temp;
                  }
              }
          }
          for(int x:score){
              System.out.print(x+"\t");
          }
      
    • 选择排序:

      public static void main(String[] args) {
          int[] score = {67, 51, 65, 32, 88, 94, 20, 64, 25, 75};
          //选择排序,从小到大
          for(int i = 0;i<score.length-1;i++) {
              int min_num = i;
              for (int j = i+1;j< score.length;j++){   //从i+1开始遍历比较,记录下最小值下标。
                  if (score[j]<score[min_num]){
                      min_num = j;
                  }
              }
              if (min_num != i){                       //最小值下标若有变,则交换以i与min_num为下标的数的位置
                  int temp = score[min_num];
                  score[min_num] = score[i];
                  score[i] = temp;
              }
          }
          for(int x:score){
              System.out.print(x+"\t");
          }
      }
      

方法基本概念

  • 拾起概念:无法由static方法调用非static方法。

  • public应与private、friendly、protected相互辨别记忆(不写时默认为default)

    作用域当前类同一package子孙类不同package
    publicOOOO
    protectedOOOX
    defaultOOXX
    privateOXXX
  • static直译为静态的,类似C++中全局的概念

    用于修饰方法或变量,也可以用来形成static代码块、

    详情请见面向对象笔记

  • 方法的重载只使用与参数类型上和个数上的不同,对于返回值的不同不支持重载。

  • 方法的递归调用:(常用于计算累加累乘)

    public static void main(String[] args) {
        System.out.println("100!的结果是:"+sum(100));
    
    }
    static int sum(int num){
        if (num ==1) {
            return 1;
        }else{
            return num+sum(num -1);
        }
    }
    

数组的引用传递:

即,传数组进方法里修改值,能够改变。

使用方法引用或返回数组:

public class Demo01{
    public static void main(String[] args) {
        int[] temp= fun();
        ptint(temp);

    }

    private static void ptint(int[] num) {
        for (int i = 0;i< num.length;i++){
            System.out.println(num[i]);
        }
    }

    private static int[] fun() {
        int ss[] = {1,2,3,4,5};
        return ss;
    }
}

利用java类库进行数组排序:

java.util.Arrays.sort(array);

对数组进行复制:

System.arraycopy(i1,0,i2,1,4);  //其中4为length

包机制

基本概念回顾

  • 为了更好的组织类,java提供了包机制,用于区别类名的命名空间。

    (个人理解其作用和文件夹基本一致,为了避免同时开发,类名(文件名)称容易相同的情况)

  • 包语句的语法格式为:(打包)

    package pkg1[. pkg2[. pkg3...]]
    
  • 一般利用公司域名倒置作为包名;

  • 为了能够使用某一个包的成员,我们需要在java程序中明确导入该包,使用“import”语句可以完成此功能

    import package1[.package2...].(classname|*);
    
  • www.*就会导入这个包下所有的类!

  • www.demo01.*就会自动加载所需类!

例:引用其他包中相同类的方法

com.seohyun.www.base包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sk0KqURJ-1546249525613)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220711235535676.png)]

com.seohyun.www.operator包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bL0RzF0B-1546249525614)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220711235653396.png)]

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJc6X4vq-1546249525615)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220712000016854.png)]

**注意:当你导入的类与本身,或导入多个类中有重名现象,在使用其方法时一定要全称,不然会指代不清而报错。

JAVADoc生成文档

java doc命令是用于生成自己的API文档

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-owYTkqzg-1546249525616)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220712084805351.png)]

基本概念

文档注解:

/**+空格 自动生成

doc命令:

javadoc -d 路径 -encoding UTF-8 -charset UTF-8 Doc.java

  • -d 指定API文档的输出目录,默认是当前目录。建议总是指定该参数。
  • -encoding UTF-8 表示你的源代码(含有符合 JavaDoc 标准的注释)是基于 UTF-8 编码的,以免处理过程中出现中文等非英语字符乱码
  • -charset UTF-8 表示在处理并生成 JavaDoc 超文本时使用的字符集也是以 UTF-8 为编码,目前所有浏览器都支持 UTF-8,这样最具有通用性,支持中文非常好

举例

package com.seohyun.www.base;

/**
 * @author seohyun
 * @version 1.0.0
 * @since 1.8
 */
public class Doc {
    String name;

    /**
     * @author seohyun
     * @param name
     * @return
     * @throws Exception
     */

    public String test(String name) throws Exception{
        return name;
    }

}

再open on Explorer,并在当前文件夹cmd

C:\Users\23614\Desktop\Java学习\Project\src\com\seohyun\www\base>javadoc -encoding UTF-8 -charset UTF-8 Doc.java
正在加载源文件Doc.java...
正在构造 Javadoc 信息...
标准 Doclet 版本 1.8.0_333
正在构建所有程序包和类的树...
正在生成.\com\seohyun\www\base\Doc.html...
Doc.java:13: 警告: @param 没有说明
     * @param name
       ^
Doc.java:14: 警告: @return 没有说明
     * @return
       ^
Doc.java:15: 警告: @throws 没有说明
     * @throws Exception
       ^
正在生成.\com\seohyun\www\base\package-frame.html...
正在生成.\com\seohyun\www\base\package-summary.html...
正在生成.\com\seohyun\www\base\package-tree.html...
正在生成.\constant-values.html...
正在构建所有程序包和类的索引...
正在生成.\overview-tree.html...
正在生成.\index-all.html...
正在生成.\deprecated-list.html...
正在构建所有类的索引...
正在生成.\allclasses-frame.html...
正在生成.\allclasses-noframe.html...
正在生成.\index.html...
正在生成.\help-doc.html...
3 个警告

C:\Users\23614\Desktop\Java学习\Project\src\com\seohyun\www\base>

此时当前文件夹将生产一堆html等东西:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTsbGfog-1546249525618)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220712090934412.png)]

点开发现已经替你生成好了API文档:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CZs7SZs6-1546249525619)(C:\Users\23614\AppData\Roaming\Typora\typora-user-images\image-20220712091042181.png)]

有说明
* @param name
^
Doc.java:14: 警告: @return 没有说明
* @return
^
Doc.java:15: 警告: @throws 没有说明
* @throws Exception
^
正在生成.\com\seohyun\www\base\package-frame.html…
正在生成.\com\seohyun\www\base\package-summary.html…
正在生成.\com\seohyun\www\base\package-tree.html…
正在生成.\constant-values.html…
正在构建所有程序包和类的索引…
正在生成.\overview-tree.html…
正在生成.\index-all.html…
正在生成.\deprecated-list.html…
正在构建所有类的索引…
正在生成.\allclasses-frame.html…
正在生成.\allclasses-noframe.html…
正在生成.\index.html…
正在生成.\help-doc.html…
3 个警告

C:\Users\23614\Desktop\Java学习\Project\src\com\seohyun\www\base>


此时当前文件夹将生产一堆html等东西:

[外链图片转存中...(img-fTsbGfog-1546249525618)]

点开发现已经替你生成好了API文档:

[外链图片转存中...(img-CZs7SZs6-1546249525619)]



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值