首页 > 编程语言 >java入门基础掌握知识

java入门基础掌握知识

时间:2024-03-24 17:33:14浏览次数:23  
标签:Java 入门 int 知识 数组 java 方法 public 变量

Java基础入门

  1. Java一门 高级 编程语言

  2. Java是 sun 公司研发的,现在属于 oracle 公司

  3. Java之父是 詹姆斯.高斯林

  4. Java主要是来做 企业级 应用开发的

  5. Java的三大技术体系是:

技术体系说明
Java SE(Java Standard Edition):标准版Java技术的核心和基础
Java EE(Java Enterprise Edition):企业版企业级应用开发的一套解决方案
Java ME(Java Micro Edition):小型版针对移动设备应用的解决方案
  1. 搭建java开发环境必须先要安装 JDK

  2. JDK应该去 Oracle 官网下载

  3. JDK目前发展到 21 版本,LTS版本有 8 11 17 版本

  4. 验证JDK,需要在命令行窗口中输入 Java -version 查看jdk的版本号

  5. Java开发环境中的编译命令是 javac , 执行命令是 java

  • 开发一个程序需要经过三个步骤: 编写 编译 执行
  • Java代码要要求:文件名称的后缀必须是 .java 结尾
  • Java代码要要求:文件名称必须与 public 修饰的类名一致 名称一致
  • Java代码要要求:必须使用 文模式下的符号

注释是什么?

  • 写在程序中对程序进行解释说明的文字
  • Java程序中书写注释的方式有几种,各自有什么不同?
  • 单行注释://
  • 多行注释:/* */
  • 文档注释:/** */
  • 注释有什么特点?
  • 不影响程序的执行,编译后的class文件中已经没有注释了。
  • 注释的快捷键是怎么样的?
  • Ctrl + / 单行注释(对当前行进行注释)
  • Ctrl + Shift + / 对选中代的码进行多行注释。

字面量

  • 字面量是什么?
    • 数据在程序中的书写格式
  • 字符、字符串在程序中的书写格式有什么要求?
    • 字符: 单引号引起来的单个内容
    • 字符串: 双引号引起来的任意内容
  • 真、假、空的书写格式是?
    • true、false、null

变量

  1. 变量是内存中的一块区域,是用来存储 数据

  2. 变量的完整定义格式是: 数据类型 变量名称 = 数据;

  3. 变量的好处是:编写的代码更 加灵活、高效和易于维护

  4. 变量的特点:装的数据是 封装好


  5. 变量要先 先声明,后使用

  6. 什么类型的变量,只能存储什么类型的数据。

  7. 变量存在访问范围,同一个范围内,多个变量的名字 不能一样

  8. 变量定义时 可以 不给赋初始值;但是在使用时,必须赋初值

关键字, 标识符, JDK

  1. 什么是关键字?

    1. 关键字就是Java自己要用到的词,并且有特殊含义的一些词。
    2. 我们就不能用来为做为:类名、变量名,否则会报错!
  2. 什么是标识符?

    1. 标识符就是自己定义的名字
    2. 标识符的规则:仅由数字,字母,下划线,美元符等组成,且不能数字开头,不能用关键词、区分大小写
  3. JDK由哪些组成?

    1. JVM虚拟机:真正运行Java程序的地方。

    2. 核心类库:Java自己写好的一些程序,给咱们的程序调用的

    3. 开发工具:javac、java、…

    image-20240322144943957

  • Java的跨平台含义是什么?

    • 一次编译,处处可用
  • Java如何实现跨平台的?

    • Java为不同的系统提供了不同类型的JVM
    • 我们的程序只需要开发一次,就可以在各种安装了JVM的系统上运行
  • JDK安装后,需要配置什么?

    • 配置JAVA_HOME=jdk安装位置
    • 在path中追加JAVA_HOME/bin
  • Path环境变量的作用是什么?

    • Path环境变量用于配置程序的路径
    • 方便我们在命令行窗口的任意目录启动程序

Java基础入门

数据存储

  1. 数据在计算机底层都是使用二进制进行存储的

  2. 快速计算一个数据的二进制方式是 除二取余法

    image-20240322145456737
  3. 数据在计算机底层存储的基本单元是 byte

  4. 数据在计算机底层存储的最小单位是 bit

  5. 字符存的是 ASCII码 表中对应的数字的 二进制 形式

  6. 字符’0’对应的数字是 48

  7. 字符’A’对应的数字是 65

  8. 字符’a’对应的数字是 97

  9. 图片、声音、视频等等内容在计算机中都是想办法转为 二进制 存储的

数据类型

基本数据类型

  1. 数据类型分为几种?

    基本数据类型:4类8种

    • 整型: byte short int(默认) long
    • 浮点型: float double(默认)
    • 字符型: char
    • 布尔型: boolean
    • 引用数据类型: String
  2. 随便写的整数、小数字面量,他们默认什么类型?

    • 23 ,默认是int类型 , 加上L/l就是long类型的数据了。
    • 23.8,默认是double类型,加上F/f就是float类型了。
  3. 什么是自动类型转换?

    • 类型范围小的变量,可以直接赋值给类型范围大的变量
  4. 表达式的自动类型转换规则是什么?

    • 小范围的类型会自动转换成大范围的类型运算
  5. 表达式的最终结果类型是由谁决定的?

    • 最终类型由表达式中的最高类型决定
  6. 表达式的有哪些类型转换是需要注意的?

    • byte short char是直接转换成int类型参与运算的
  • 什么是强制类型转换?

    • 默认情况下,大范围类型的变量直接赋值给小范围类型的变量会报错!

    • 可以强行将类型范围大的变量、数据赋值给类型范围小的变量。

      目标数据类型 变量 = (目标数据类型)变量值

  • 强制类型转换有哪些需要注意的?

    • 可能出现数据丢失。
    • 小数强制转换成整数是直接截断小数保留整数。

运算符

+ 除了做基本数学运算,还有哪些功能?
与字符串做+运算时会被当成连接符,其结果还是字符串。
识别技巧:能算则算,不能算就在一起。

1、自增、自减运算符是什么,有什么作用,需要注意什么?
++、–;对当前变量值+1、-1
只能操作变量,不能操作字面量

2、自增、自减运算符放在变量前后有区别吗?
如果单独使用放前放后是没有区别的。
非单独使用:在变量前 ,先进行变量自增/自减,再使用变量。++i
非单独使用:在变量后 ,先使用变量,再进行变量自增/自减。i++

扩展赋值运算符的作用是什么?有什么特点

  • +=可以实现数据的累加,把别人的数据加给自己。

  • 扩展的赋值运算符自带强制类型转换。

  • 三元运算符

    • 执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。

流程控制语句

if语句

if分支的作用是什么?
	可以根据条件,选择执行某段程序
if分支的写法有几种?
if (条件表达式) {
    语句体;	
}

if (条件表达式) {
    语句体1;	
} else {
    语句体2;	
}

if (条件表达式1) {
    语句体1;	
} else if (条件表达式2) {
    语句体2;	
} else if (条件表达式3) {
    语句体3;	
} 
. . .
else {
    语句体n+1;
}
注意: 
如果if语句的{}中只有一行代码的情况,{}可以省略不写(但是不推荐省略)。
if(条件){},()后不能跟“;”否则{}中的代码将不受if的控制了。

switch

switch分支的格式、执行流程是怎么样的?
switch(表达式){    
    case 值1:执行代码1;break;
    case 值2:执行代码2;break;
    … 
    case 值n-1:执行代码n-1;break;
    default:执行代码n;
}
if、switch的区别有哪些?
if适合做区间匹配,功能强大
switch适合做值匹配,性能更好
注意事项: 
1、使用switch时有哪些注意事项?
表达式类型可以是byte、short、int、char、枚举、String,不能是double、float、long
case给出的值不允许重复,且只能是字面量,不能是变量。
正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
2、switch穿透性能解决什么问题?
存在多个case分支的代码是一样时,可以把代码写到一个case块,
其他case块通过穿透性能,穿透到该case块即可,这样可以简化代码。

for循环

for(初始化语句 ; 条件判断语句;  条件变更语句 ) {
    循环体语句 ; //要重复执行的代码
}

  • for循环的作用是什么?
    • 减少代码的重复编写,灵活的控制程序的执行。

while循环

初始化语句;
while (循环条件) {
    循环体语句;
    条件变更语句;
}

数组

1、什么是数组?
数组是一个装数据的容器,并且要求装的数据都要是同一种类型

2、什么时候使用数组?
批量操作同类型数据时,建议使用数组。

3、使用数组的好处是什么?
使用数组可以减少代码开发,而且代码逻辑更清晰

静态初始化数组

写法:
//简化格式
数据类型[]  数组名 = { 元素1,元素2 ,元素3,… };
int[] ages = {12, 24, 36, 48, 60};

// 完整格式 数据类型[]  数组名 = new 数据类型[]{ 元素1,元素2 ,元素3… };
int[] ages = new int[]{12, 24, 36, 48, 60};
注意点: 
数据类型[] 数组名 也可写成  数据类型 数组名[]
什么类型的数组必须存放什么类型的数据

1、数组是属于什么类型,数组变量名中存储的是什么?
数组是引用数据类型
数组变量名中存储的是数组在内存中的地址信息
2、在数组中,索引是用来做什么的?
索引,又叫下标,是指一个数据元素在数组里面排在第几个的位置
索引是是从0开始计数的

image-20240322152232988

动态初始化数组

1、动态初始化数组的写法是什么样的?
数据类型[] 数组名 = new 数据类型[长度];
int[] ages = new int[4];
2、动态初始化数组后元素的默认值是什么样的?
byte、short、int 、char、long类型数组的元素默认值都是0
float、double类型数组元素的默认值都是0.0
boolean类型数组的元素默认值是false
引用数据类型数组的元素的默认值是null

3、两种数组定义的方法各自适合什么业务场景?
动态初始化:开始不确定具体元素值,只知道元素个数
静态初始化:一开始就知道要存入哪些元素值

重点

1、运行一个Java程序,主要看JVM中包含的哪几部分内存区域?
方法区: 存放class文件
栈内存: 方法被调用后,进入栈内存,变量也存在这
堆内存: new出来的东西进入堆内存

2、 简单说说 int a = 20;   int[] arr = new int[3]这两行代码的执行原理?
a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。

1、多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?
原因:多个数组变量中存储的是同一个数组对象的地址
注意:多个变量修改的都是同一个数组对象中的数据


2、如果某个数组变量中存储的null,代表什么意思?需要注意什么?
代表这个数组变量没有指向数组对象
可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,
     会报空指针异常:NullPointerException

方法

1、什么是方法?
方法就是把一些代码打包在一起,用到的时候就调用
2、方法要执行必须怎么办?
必须进行调用
3、使用方法有什么好处?
提高代码的复用性,提高代码的可维护性

方法的定义和声明

1、基本方法的定义格式
public static void 方法名 ( ) {
	方法体;
}
2、基本方法的调用格式
方法名 ( ) ;

3、方法的注意细节
方法必须先定义后调用,不调用不执行
方法的定义顺序不影响执行结果,但是调用顺序影响执行结果
方法执行完毕后,会回到调用的地方,继续向下执行


1、带参数方法的定义格式
public static void 方法名 ( 参数1,参数2,…… ) { … … }
2、带参数方法的调用格式
方法名 ( 参数1,参数2,…… );

3、带参数方法的注意细节
方法调用时,实参必须与形参保持同样的类型、数量和顺序
形参:全称形式参数,是指方法定义中的参数
实参:全称实际参数,方法调用中的参数
    
1、带返回值的定义格式
public static 返回值类型 方法名 (参数) {
  方法体;  
  return 返回值;
}
2、带返回值方法的调用格式
数据类型 变量名 = 方法名 (实参);
3、带返回值方法的注意细节
return部分返回数据的类型必须和方法定义时声明的返回值类型一致

方法的注意事项
    方法不调用就不执行
    方法调用时,实参必须跟形参匹配;返回值必须跟return结果匹配
    方法与方法之间是平级关系,不能嵌套定义
    方法的执行顺序和编写顺序无关,但是和调用顺序有关
    方法的返回值类型为void,表示该方法没有返回值,可以省略return不写
    在void方法中可以单独书写return,表示结束方法,return后面不能跟具体内容
    return语句下面,不能编写代码,因为永远执行不到,属于无效的代码

方法的重载

判断方法重载的两个重要条件是什么
方法名称相同
形参列表不同(数量、类型、顺序)

image-20240322153356064
  • 方法的运行区域在哪里

    • 栈内存
  • 栈有什么特点

    • 先进后出
  • 基本类型和引用类型的参数在传递的时候有什么不同?

    • 基本类型的参数传输存储的数据值
    • 引用类型的参数传输存储的地址值

面向对象编程

面向对象


1、 在Java中, 一切皆 对象
2、 对象其实就是一个具体的东西,可以使用 属性和行为 对其进行具体描述
3、类与对象的关系: 类是创建对象的 模版 , 对象是类的具体 实现 ; 

4、目前要设计一辆车,牌子是奥迪,颜色是红色,功能是拉货
      按照面向对象的思想,应该怎么实现?
      ①  创建一个类,类中有属性:牌子和颜色, 还有一个行为是:拉货
      ②  根据上面的类创建一个对象(new)
      ③  给对象的属性赋值,然后调用它的行为方法

类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car…

类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。

成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。

数据类型明细默认值
byte、short、char、int、long0
基本类型float、double0.0
booleanfalse
引用类型数组、Stringnull

对象名要求和类名相似,但是需要首字母小写,建议和类名同名

一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。

内存相关

1、Student s1 = new Student()在计算机中的执行原理是
每次new Student(),就是在堆内存中开辟一块空间,代表一个学生对象
s1变量里面记住的是学生对象的内存地址值
2、如何识别一个变量是引用类型的变量?
这个变量中如果存储的是内存的地址值,那么他就是一个引用类型的变量
3、执行Student s1 = null 在计算机中会发生什么?
变量s1中保存的内存地址值会被设置为null
地址值对应的内存区域如果没有其它变量引用,就会被垃圾回收器自动回收

封装

封装理论

1、什么是封装?
在程序设计中,应当把对象属性和行为设计到对象内部去,而且对象中的数据不能被随意访问。
2、为什么要封装?
在类中默认定义的变量是随时可被其他类访问、修改,是不安全的
3、如何封装?
使用private修饰成员变量(public进行修饰公开成员,private 进行修饰私有成员)
4、封装之后如何访问数据
提供对应变量的set/get方法

this关键字

区别成员变量局部变量
类中位置不同类中,方法外常见于方法中(形参或单独定义)
初始化值不同有默认值, 不需要初始化赋值没有默认值,使用之前必须完成赋值
内存位置不同堆内存栈内存
作用域不同整个对象在所归属的大括号中
生命周期不同与对象共存亡随着方法的调用而生,随着方法的运行结束而亡
1、this关键字是什么?
this就是一个变量, 可以用在方法中 ,用来代表调用当前方法的对象;
哪个对象调用方法,this就指向哪个对象,也就是拿到哪个对象。
2、this关键字在实际开发中常用来干啥?
用来解决对象的成员变量与方法内部变量的名称一样时,导致的访问冲突问题
3、成员变量和局部变量的区别
类中位置、初始化值、内存位置、作用域、生命周期

构造器

1、书写格式
    1. 方法名必须和类名保持一致
    2. 方法没有返回值,也不能使用void修饰
    3. 创建对象时,构造方法会被自动调用
    4. 一个类中,如果没有任何的构造方法,Java会自动生成一个无参构造
2、应用场景
	可以使用全参构造器在创建对象的时候完成对变量的赋值
3、注意事项
    1. 一个类中,如果没有任何的构造方法,Java会自动生成一个无参构造
    2. 一个类中,一旦有了有参构造方法,Java将不会再生产无参构造,此时如果需要无参构造,可以自行创建

public class Student {
    /** 构造器 */
    public Student() {
        ...
    }
}

javabean

1、实体类的作用和注意点是什么
实体类是用来保存数据的java类,可以用它创建对象,保存某个事物的数据。
实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。

2、实体类有啥特点?
1. 成员变量必须私有,且要为他们提供get、set方法
2. 必须有无参数构造器, 可以有带参构造

字符串、集合

1、声明一个包的关键字是什么?
package com.itheima.javabean;
public class Student { }

2、在自己类中调用其他包下的程序的注意事项
① 要调用自己所在包下的其他类,可以 直接通过类名访问,不需要导入。
② 要调用其他包下的类,则必须在当前类中 使用import语句导入相应的类 , 才可以访问    
③  java.lang 包下的类是不需要我们导包的,可以直接使用。
④ 要调用多个不同包下的类,而这些类名正好一样,此时默认只能导入一个类,另一个类必须 使用import static语句或者在代码中使用完整的类名(包括包名)访问。

String中常用的方法

方法名说明
public int length()获取字符串的长度返回(就是字符个数)
public char charAt(int index)获取某个索引位置处的字符返回
public char[] toCharArray():将当前字符串转换成字符数组返回
public boolean equals(Object anObject)判断当前字符串与另一个字符串的内容一样,一样返回true
public boolean equalsIgnoreCase(String anotherString)判断当前字符串与另一个字符串的内容是否一样(忽略大小写)
public String substring(int beginIndex, int endIndex)根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int beginIndex)从传入的索引处截取,截取到末尾,得到新的字符串返回
public String replace(CharSequence target, CharSequence replacement)使用新值,将字符串中的旧值替换,得到新的字符串
public boolean contains(CharSequence s)判断字符串中是否包含了某个字符串
public boolean startsWith(String prefix)判断字符串是否以某个字符串内容开头,开头返回true,反之
public String[] split(String regex)把字符串按照某个字符串内容分割,并返回字符串数组回来

String对象的内容不可改变,被称为不可变字符串对象。

String有哪几点注意事项

  1. 只要是以“…”方式写出的字符串对象,
    会存储到字符串常量池,且相同内容的字符串只存储一份

  2. 通过new方式创建字符串对象,
    每new一次都会产生一个新的对象放在堆内存中

  3. String对象的内容不可改变,被称为不可变字符串对象。

ArrayList

构造器说明
public ArrayList()创建一个空的集合对象
常用方法名说明
public boolean add(E e)将指定的元素添加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
1、集合是什么,有什么特点?
一种容器,用来存储数据的
集合的大小可变
2、ArrayList是什么? 怎么使用?	
是集合中最常用的一种,ArrayList是泛型类,可以约束存储的数据类型。
创建对象,调用无参数构造器初始化对象:public ArrayList();   
调用相应的增删改查数据的方法

的元素添加到此集合的末尾 |
| public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
| public E get(int index) | 返回指定索引处的元素 |
| public int size() | 返回集合中的元素的个数 |
| public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
| public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
| public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |

1、集合是什么,有什么特点?
一种容器,用来存储数据的
集合的大小可变
2、ArrayList是什么? 怎么使用?	
是集合中最常用的一种,ArrayList是泛型类,可以约束存储的数据类型。
创建对象,调用无参数构造器初始化对象:public ArrayList();   
调用相应的增删改查数据的方法

标签:Java,入门,int,知识,数组,java,方法,public,变量
From: https://blog.csdn.net/Founder_Xiao_Xin/article/details/136944179

相关文章

  • 注解总结,Java中的注解,springboot中的注解
    注解总结1、Junit开始执行的方法:初始化资源,执行完之后的方法:释放资源测试方法,必须是:公有、非静态、无参无返回值的在一个类中,可以定义多个测试方法,每个测试方法可以单独运行,也可以整体运行(顺序:方法名升序)Junit4注解说明@Test测试方法@Before用来修饰实例方法,在每个@......
  • 阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】
    文章目录学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路BERT代码学习过程20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析),一开始看这块其实挺懵的,不会就去问百度或其他人,当时遇见困难挺害怕的,但22后面开始力扣题【目前已刷......
  • 知识总结--简单复习各部件
    目录内部结构部件介绍配置步骤之前学了很多部件,配置了很多参数,但是没有很系统地把他们连接在一起,今天这个图里简洁描述了资源与资源之间的关系。内部结构部件介绍黑框部分为CPU、内部有一个内核专门处理事件,所有的电信号中断信号都由内核处理。红框:CPU与外界用引脚......
  • 【晴问算法】入门篇—日期处理—日期加法
    题目描述给定一个日期DAY和一个正整数n,求日期DAY加上n天后的日期。输入描述第一行为给定的日期DAY(格式为YYYY-MM-DD,范围为1900-01-01<DAY≤2199-12-31),数据保证一定合法;第二行为需要增加的天数n(1≤n≤10000)。输出描述以YYYY-MM-DD的格式输出增加了n天后的日期。样例1......
  • (毕设)基于Java+Vue+Mysql的WMS仓库管理系统
          前言: WMS(WarehouseManagementSystem)仓库管理系统是一个用于优化仓库操作、提高效率和准确性的软件解决方案。以下是针对列出的WMS仓库管理系统的各个部分的简要描述:1.订单管理订单管理是WMS的核心功能之一,涉及处理、跟踪和完成客户订单。这包括:订单录入:......
  • (毕设)基于Java+SpringBoot+Vue+Mysql的智慧园区管理系统
        前言:智慧园区管理系统是一个集成了园区管理、缴费服务、退款功能、缴费提醒、抄表功能、打印功能、统计报表和协同办公等多个模块的综合性系统。以下是对每个模块及其子功能的简要说明:园区管理:园区管理:对整个园区进行宏观管理,包括园区的基本信息、资源配置、设施维......
  • (毕设)基于Java+Vue+Mysql的门店管理系统
        前言:门店管理系统是一个综合性的软件解决方案,旨在帮助门店高效地管理日常运营、提升服务质量、优化资源配置和增强决策能力。以下是您提到的各个管理模块的简要概述:门店管理:门店信息管理:记录门店的基本信息,如门店名称、地址、联系方式、营业时间等。门店布局管理:定......
  • Javascript中的严格模式 “use strict“
    一、为什么使用严格模式?在普通的JavaScript中,写错变量名会创建新的全局变量,在严格模式中,写错变量名会抛出错误来提醒开发者二、声明严格模式通过在脚本或函数的开头添加“usestrict”;来声明严格模式。"usestrict"指令只能在脚本或函数的开头被识别在脚本开头进......
  • Java项目:332SSM校园网站设计与实现(含论文)
    作者主页:源码空间站2022  简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍角色:管理员、学生,项目分为前后台学生登陆系统后,可以查看首页,学校介绍、领导架构、联系我们、留言板,新闻资讯信息、师资力量、校园风光、我的、后台管理等功能管理......
  • PhpStrom启动报错, java.net.BindException: Address already in use: bind
    问题描述:今天启动phpstromIDE时,突然报错,报错信息如下图:问题分析1.不正确关闭应用(强制关闭):可能是之前启动了一个本地web服务占了端口,在没有停掉服务,直接关闭IDE导致的(尝试了重启电脑也没解决)2.其他应用占用端口:安装了Hyper-V导致端口被占用?显然我的是第一种情况问题解决......