Java入门
本文介绍了Java编程基础,包括流程控制、用户交互Scanner输入方法、条件判断(if-else, switch)、循环结构(while, do-while, for)、方法定义与调用、数组操作及递归等内容。 2025-10-25 12:49:41 Author: www.freebuf.com(查看原文) 阅读量:2 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

流程控制

用户交互Scanner

  1. 输入&输入方法(比如是输入hello world)

    • next()输入字符串不能存在空格 (输出hello)

    • nextLine(),回车前的所有字符,可以获取到空格 (输出hello world)

      package xxxxx.xxx.xxx
      import java.util.Scanner;
      public class Demo03 {
      public static void main(String[] args) {
      // 从键盘接收数据
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入数据:");
      String str = scanner.nextLine();
      System.out.println("输出的内容为:"+str);
      scanner.close();
      }
      }
  2. 判断

    if (scanner.hasNextInt()) {    //这个条件是判断 输入是不是整数的
    i = scanner.nextInt();
    System.out.println("整数数据:" + i);
    } else {
    System.out.println("输入的不是整数数据:" + i);
    }

    判断字符串有函数: x.equal(“xcsccsc”) 判断x输入字符串和xcsccsc字符串是否相等

判断

  1. if

    • 单层--if

      if(){
      System.out.println("*****")
      }
    • 两层--if else

      if(){
      System.out.println("*****")
      }else(){
      System.out.println("*****")
      }
    • 多层--if else if else

      if(){
      System.out.println("*****")
      }else if(){
      System.out.println("*****")
      }else if(){
      System.out.println("*****")
      }else(){
      System.out.println("*****")
      }
  2. switch case

    switch(expression){
    case value :
    //语句
    break; //可选
    case value :
    //语句
    break; //可选
    //你可以有任意数量的case语句
    default : //可选
    //语句
    }

    注意:

    • switch变量类型:byte short int char string(java7以后)

    • case变量类型:字符串常量 自变量

    • case穿透:不写break就在条件后全执行

循环

  1. while

    while(布尔值){

    }

    注意要写退出循环的限制条件,不然会变成死循环

    eg:i++;

  2. do while

    do{

    }while();//注意有分号

  3. for

    for(初始化(可以空);布尔表达式;更新){//分号隔开
    代码语句
    }

    在idea里面,写100.for可以直接生成

  4. 增强for

    public class ForDemo05 {
    public static void main(String[] args) {
    int[] numbers = {10,20,30,40,50}; //定义了一个数组
    for (int x:numbers){
    System.out.println(x);
    }
    }
    }

    遍历数组,每次for循环输出

  • While和do-While的区别:]

    while先判断后执行。dowhile是先执行后判断!

    Do...while总是保证循环体会被至少执行一次!这是他们的主要差别

  • break&&continue

    break用于强制退出循环,不终止程序(放在判断后)

    continue只是这一次不执行,下一次继续执行

    (goto在java不存在)但是可以利用标签使用,起跳转作用

方法

基础

方法类似于函数

  • System.out.printIn() 类.对象.方法

  • Java方法是语句的集合,它们在一起执行一个功能

    • 方法是解决一类问题的步骤的有序组合

    • 方法包含于类或对象中

    • 方法在程序中被创建,在其他地方被引用

public class Demo01{
//main方法
public static void main(string[]args){
int sum=add(a:1,b:2);System.out.println(sum);
}
//加法
public static int add(int a,int b){
return a+b;
}
}

在写方法的时候public int add(int a,int b),要想调就要加一个static

  • 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展

    可以多用写一些方法,把main函数变得更加简洁

修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
....
return 返回值;//有返回类型,一定要写return
}

调用

  • 当方法返回一个值的时候,方法调用通常被当做一个值

  • 如果方法返回值是void,方法调用一定是一条语句

重载

函数名称相同,参数类型不同(返回值是谁,就调用谁)

参数类型也可以相同,在方法里面强制转化就行

//比大小
public static int max(double num1,double num2){
int result = 0;
if (num1==num2){
System.out.println("num1==num2");
return 0; //终止方法
}
if (num1>num2){
result = (int)num1;
}else {
result = (int)num2;
}
return result;
}

但是在调用的时候,要调配和方法相匹配,要不编译器会报错

命令行传参

public class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}

1761396319_68fcc65faf9dbef0c277f.png!small?1761396320984

直接在idea里面的命令行运行不成功,所以打开方法-所在文件夹,使用命令行编译,发现还是不行

因为运行需要在src目录下,回退完目录后,再次运行

源码定义的是一个数组,所以在语句后面跟上参数this is kuangshen

发现成功返回

也就是说main方法也是可以传参的

可变参数

本质就是一个数组

  • JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。、

  • 在方法声明中,在指定参数类型后加一个省略号(...)

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明

public class Demo04 {
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4,45,5);
}

public void test(int... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
System.out.println(i[5]);
}
}

递归

自己调用自己

简单来说就是找到公式规律,然后往前一个未知数推导(复杂问题,简单化,减少重复计算,减少代码量)

  • 递归结构包括两个部分:

    递归头:什么时候不调用自身方法,如果没有头,将陷入死循环

    递归体:什么时候需要调用自身方法

java主要使用的是栈,就是罐子里面一个叠一个,先放后拿

静态&非静态

  • 静态:有static

    在其他类里面写,可以在main里面调用类.方法

  • 非静态:

    调用:将类实例化new--------->对象类型 对象名=对象值

    Student student =new student();

    1761396328_68fcc6688be620787b0ec.png!small?1761396329848

调用

  • 有static,和类一起加载,存在较早

  • 无static,在类实例化之后才存在,比上面那个迟

所以不能在有static,调用无static的方法

1761396333_68fcc66dc4af96a688f64.png!small?1761396335001

b()明显报错了

数组

定义一组类型,相同类型的有序集合,通过下标访问

定义

public static void main(stringl args){
int[] nums; //1.定义
int nums2[];//2.c和c++使用的多
}

没定义,返回默认值(int 的默认值就是0)

获取数组长度是arrays。length

初始化

  • 静态初始化

    // 静态初始化: 创建 + 赋值
    int[] a = {1,2,3,4,5,6,7,8};
    System.out.println(a[0]);
  • 动态初始化(包含默认初始化

    先分配内存(初始化)(变成默认值),再赋值

    // 动态初始化 : 包含默认初始化
    int[] b = new int[10];
    b[0] = 10;
  • 数组的默认初始化

    就是分配内存的初始化

内存分析

  1. 方法区

步骤 1:声明数组
代码int[] array = null;声明了一个整型数组变量array,并将其初始化为null,表示该数组目前没有指向任何实际的数组对象

步骤 2:创建数组
代码array = new int[10];创建了一个长度为 10 的整型数组,并将其引用赋值给array变量,此时数组的每个元素都有了默认值(整型数组默认值为 0)

步骤 3:给数组元素赋值
代码通过类似nums[0] = 1;这样的语句(这里变量名可能存在笔误,应为array),给数组的每个元素依次赋值,从array[0]到array[9]分别赋值为 1 到 10

先声明空数组(栈),在new一个数组(在堆内部分配空间),然后赋值(赋值)

1761396342_68fcc67657b9feee938b1.png!small?1761396343451

特点

  • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

  • 其元素必须是相

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/network/454154.html
如有侵权请联系:admin#unsafe.sh