IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Surpass Day4——Java语法基础3 -> 正文阅读

[Java知识库]Surpass Day4——Java语法基础3

目录

1、用户控制端输入

1.1 Scanner类中的方法

1.2 System.in和System.out方法

1.3 InputStreamReader和BufferedReader方法

1.4 nextLine( )和next( )的区别

2、方法

2.1 方法的定义,语法结构

2.2 方法在执行过程中,JVM内存的分配和变化

2.3 栈内存的特点

3、方法执行内存分析

4、方法重载(overload)

4.1 什么时候考虑使用方法重载?

4.2 构成方法重载的条件

4.3 方法重载的影响因素

4.4 方法重载的应用

5、方法递归



1、用户控制端输入

第一步:创建键盘扫描器对象

java.util.scanner s = new java.util.Scanner(System.in);

第二步:调用Scanner对象的next()方法开始接收用户键盘输入

敲完回车键 键入的信息会自动赋值给标识符

String userInputContent = s.next();【以字符串的形式接收】

int num = s.nextInt();【以整型的形式接收】

//标识符的命名规范:见名知意

1.1 Scanner类中的方法

  • 优点一: 可以获取键盘输入的字符串 ;

  • 优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;

Scanner s = new Scanner(System.in); 
System.out.println("ScannerTest, Please Enter Name:"); 
String name = sc.nextLine(); ?//读取字符串型输入 
Scanner s = new Scanner(System.in); 
System.out.println("ScannerTest, Please Enter Age:"); 
int age = sc.nextInt(); ? ?//读取整型输入 
Scanner s = new Scanner(System.in); 
System.out.println("ScannerTest, Please Enter Salary:"); 
float salary = sc.nextFloat(); //读取float型输入 
Scanner s = new Scanner(System.in); System.out.println("Your Information is as below:"); 
System.out.println("Name:" + name +"\n" + "Age:"+age + "\n"+"Salary:"+salary); 

1.2 System.in和System.out方法

  • 缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取

  • 缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。

try{ 
 ?System.out.print("Enter a Char:"); 
 ?char i = (char)System.in.read(); 
 ?System.out.println("Yout Enter Char is:" + i); 
} 
catch(IOException e){ 
 ?e.printStackTrace(); 
} 

1.3 InputStreamReader和BufferedReader方法

  • 优点: 可以获取键盘输入的字符串

  • 缺点: 如何要获取的是int,float等类型的仍然需要转换

System.out.println("ReadTest, Please Enter Data:"); 
InputStreamReader is = new InputStreamReader(System.in); //new构造InputStreamReader对象 
BufferedReader br = new BufferedReader(is); //拿构造的方法传到BufferedReader中 
try{ //该方法中有个IOExcepiton需要捕获 
 ?String name = br.readLine(); 
 ?System.out.println("ReadTest Output:" + name); 
} 
catch(IOException e){ 
 ?e.printStackTrace(); 
} 

1.4 nextLine( )和next( )的区别

nextLine( )方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。 next( )会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。


2、方法

2.1 方法的定义,语法结构

[修饰符列表] 返回值类型 方法名(形式参数列表){

方法体;

}

注意:

1)修饰符列表可选项,不是必须的,目前统一写成public static;

2)方法内的修饰符列表当中有static关键字时,调用方法:类名.方法名(实际参数列表);当方法在该类中时,"类名."可以省略;

3)方法名:首字母小写,后面每个字母大写,遵循驼峰规则;

4)建议一个源文件当中只定义一个class,比较清晰;

2.2 方法在执行过程中,JVM内存的分配和变化

2.2.1 方法的定义和执行:

方法只定义,不调用是不会执行的,并且在JVM中也不会给该方法分配"运行所属"的内存空间;只有调用的时候才会分配所属的内空间;

2.2.2 JVM内存划分上主要的内存空间:

方法区内存、堆内存、栈内存(还有其他的内存空间);

2.2.3 栈数据结构 :

*栈:stack,是一种数据结构;

*数据结构是数据的存储形态;

*常见的数据结构:数组、队列、栈、链表、二叉树、哈希表/散列表;

2.2.4 方法代码文件的存储位置,内存的分配位置:

1)方法代码片段属于.class字节码文件的一部分,字节码文件在类的加载的时候,将其放到了方法区当中。所以JVM中的三块主要的内存空间中方法区内存最先有数据。存在了代码片段;

2)代码片段虽然在方法区当中只要一份,但是可以重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配【栈内存中分配方法运行的所属空间】;

3)方法在调用的瞬间会给该方法分配独立的内存空间,在栈中发生压栈动作,方法执行结束之后,给该方法分配独立的内存空间全部释放,此时发生弹栈动作。

压栈:给方法分配内存;

弹栈:释放该方法的内存空间;

4)局部变量在在“方法体”中声明,在栈中存储,运行时在栈中分配

e.g.下列程序模型就是一个压栈、弹栈的过程;

main begin
m1 begin
m2 begin
m3 begin
m3 over
m2 over
m3 over
main over

2.3 栈内存的特点

1)栈帧永远指向栈顶元素

2)栈顶元素处于活跃状态,其他元素静止

3)术语: 压栈/入栈/push

弹栈/出栈/pop

4)栈数据结构存储数据的特点:

先进后出;

后进先出


3、方法执行内存分析

public class MethodTest01
{
    public static void main(String[] args)
    {
        int a = 10;
        int b = 20;
        int restValue = sumInt(a,b);
        System.out.println("retValue = "+ retvalue);
    }
 ? ?public ststic int sumInt(int i,int j)
 ?  {
 ? ? ? ?int result = i + j;
 ? ? ? ?int num = 3;
 ? ? ? ?int reValue = divide (result,num);
 ? ? ? ?return retValue;
    }
 ? ?public static int divide (int x,int y)
 ?  {
 ? ? ? ?int z = x / y;
 ? ? ? ?return z;
    }
}

?

?


4、方法重载(overload)

优点:

功能不相同但相似,像是在使用同一个方法一样,程序员编写代码更加方便,也不需要记忆更多的方法名,代码更美观;

(javascript不支持方法重载机制)

public class MethodTest01
{
    public static void main(String[] args)
    {
 ? ? ? ?System.out.println(sum(1,2));
 ? ? ? ?System.out.println(sum(1.0,2.0));
 ? ? ? ?System.out.println(sum(1L,2L));
 ?  }
 ? ?public static int sum(int a,int b)
 ?  {
 ? ? ? ?return a + b;
    }
 ? ? public static long sum(long a,long b)
 ?  {
 ? ? ? ?return a + b;
    }
 ? ? public static double sum(double a,double b)
 ?  {
 ? ? ? ?return a + b;
    }
}

参数的类型不同,对应调用的方法也不同。此时区分方法不再依靠方法名了,依靠的是实参的数据类型。

4.1 什么时候考虑使用方法重载?

*功能相似的时候,尽可能让方法名相同;

【功能不同/不相似的时候,尽可能让方法名不同】;

4.2 构成方法重载的条件

1)在同一个类中

2)方法名相同

3)参数列表不同

(数量不同、顺序不同、类型不同)

4.3 方法重载的影响因素

1)方法重载和方法名+参数列表有关;

2)方法重载和返回值类型无关;

3)方法重载和修饰符列表无关;

4.4 方法重载的应用

用户自定义封装一段代码,使得在使用时更加便捷快速调用;

public class helloworld
{
 ? ? public static void main(String[] args)
    {
 ? ? ? ? U.v(2.0);
 ? ? }
}
class U
{
    public static void v(long b){
 ? ? ?  System.out.println(b);
    }
 ?  public static void v(double b){
 ? ?    System.out.println(b);
    }
 ? ?public static void v(short b){
 ? ? ? ?System.out.println(b);
    }
 ?   public static void v(char b){
 ?      System.out.println(b);
    }
 ? ? public static void v(String b){
 ? ?    System.out.println(b);
    }
 ?   public static void v(byte b){
 ? ?    System.out.println(b);
    }
}

5、方法递归

缺点:

耗费栈内存,调用一次方法栈内存就会新分配一块所属的内存空间;

当没有结束条件时,栈内存溢出错误,错误无法挽回,只有一个结果,就是JVM停止工作;

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:44:53  更:2022-01-01 13:45:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:52:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码