当前位置: 首页 > news >正文

在C语言基础上学Java【Java】【二】

众所周知,Java是C风格的语言,对于学过C语言的人学Java可以快速适应。
废话不多说,直接边看代码边学。

数组

static void array(){
        //完整写法,int []a1=new int[]{1,2,3},可以看到,数组的静态初始化也是通过new关键字声明的,因此内存空间也会在堆内存上
        int []a1={1,2,3};//数组的静态初始化,也可以这样int a1[]={1,2,3},但不推荐
        int []a2=new int[5];//数组的动态初始化,所有数组的内存都是在堆内存上分配的
        //数组的动态初始化会自动初始化,数值类型的会被初始为0,布尔类型的会被初始为false,引用类型的会被初始为null
        int [][]a3={{1,2,3},{4,5,6}};//
        int [][]a4=new int[5][5];//二维数组的动态初始化,可以不写第二维
        //注意,二维数组可以被认为是一维数组的数组,不同“行”的数组在堆中不同的地方
        //注意,像a1,a3[0]等这些都是存放内存地址的
        System.out.println(a1);//结果会是这样的[I@……,“[”表示数组,“I”表示类型是int型,“@”为分隔符,其后为内存地址
        //注意,数组会在适当的时候被JVM回收其占用的内存,不需要手动释放数组内存
    }

方法(函数)

你可以将Java中的方法理解为C语言中的函数。

void类型的方法

void method1(){
        System.out.println("Hello World");
        return ;
    }

int类型的方法

int method2(int a,int b){
        return a+b;
    }

引用类型的方法

int []method3(){
        int []temp={1,2,3};
        return temp;
    }

static关键字

在C语言中,static关键字通常用来修饰变量,用来保证变量的生命周期够长;而在Java中,static关键字通常用来修饰方法,用static修饰的方法被称为静态方法不用的称为实例方法,静态方法中不能直接调用实例方法,但实例方法可以直接调用静态方法。

  • 静态方法:属于类,无需实例,只能直接访问静态成员

  • 实例方法:属于对象,需通过实例调用,可访问静态和实例成员

 为什么不允许静态方法直接调用非静态方法?

  • 非静态方法依赖对象状态
    非静态方法可能操作对象的成员变量(如 this.value)。如果允许静态方法直接调用非静态方法,相当于在没有对象实例的情况下,尝试操作一个不存在的对象的状态,这会导致逻辑混乱甚至内存错误。

  • Java 通过语法规则强制禁止这种调用,目的是:

  • 保证对象先于方法存在:确保非静态方法被调用时,其依赖的对象实例已正确初始化。

  • 明确职责边界:静态方法应专注于与类相关的操作(如工具方法),而非静态方法专注于对象的行为和状态。

什么是类,什么是对象?

这里先简单的说一下,后续将详细介绍。

是「模板」,对象是「根据模板造出的具体东西」,类只定义规则,不实际存在,对象是具体存在的,可以实际操作的东西。

class a2{
    static void method(){//静态方法
        new a2().method1();//a2为类名
    }
    void method1(){//实例方法
        System.out.println("Hello World");
    }
    int method2(int a,int b){
        a2.method();//可以写成method();
        method1();
        return a+b;
    }
}

public关键字

在C语言中,可以通过将函数所在文件作为头文件在其他文件中调用;在Java中,可以通过加上修饰字public方便地在不同包的其他文件中使用(可以将同一个包的所有Java文件看成是一个特殊的文件被拆成不同文件,但实际并不是,这只是个比喻)。注意,static对方法的修饰会导致不同的方法调用方式。

作用:控制方法的访问权限

  • 加 public:方法对所有类可见(包括其他包中的类)。

  • 不加:方法默认是包级可见(仅在同一个包内的类中可访问)。

public class MyClass {
    public void publicMethod() {}   // 任何类均可调用
    void packagePrivateMethod() {}  // 仅同包类可调用
}

 方法的重载

Java 允许方法重载,即在同一个类中,可以定义多个名称相同但参数类型或参数个数不同的方法。

例一:

    int method1(int a,int b){
        return a+b;
    }
    int method1(int a,int b,int c){
        return a+b+c;
    }

例二

    int method2(int a,int b){
        return a+b;
    }
    int method2(int a,long b){
        return (int)(a+b);
    }

例三

    int method3(long a,int b){
        return (int)(a+b);
    }
    int method3(int a,long b){
        return (int)(a+b);
    }

错误示例:

例一

    int method1(int a,int b){
        return a+b;
    }//仅返回类型不同,无法重载
    double method1(int a,int b){
        return a+b;
    }

例二

    int method2(int a,int b){
        return (a+b);
    }//参数顺序不同但类型相同,视为同一方法签名
    int method2(int b,int a){
        return a+b;
    }

相关文章:

  • 工业软件的破局与重构:从技术依赖到自主创新的未来路径
  • Vagrant+VMWare 安装Ubuntu24.04
  • JVM常见概念之条件移动
  • 《掌握基础DOM操作:从零开始的前端入门指南》
  • C++的常用容器嵌套
  • Android Compose 基础布局之 Box 和 Stack 源码深度剖析(九)
  • 【留一下记录】Vllm在Linux环境下的学习笔记
  • 多路FM调频广播解调器:多路电台FM广播信号一体化解调处理方案
  • Burp Suite HTTPS解密原理
  • 星越L_大灯延时关闭使用讲解
  • vue3之写一个aichat---实现聊天逻辑
  • OpenCV Imgproc 模块使用指南(Python 版)
  • 【ACM竞赛的必要性】
  • 鸿蒙开发工程师简历项目撰写全攻略
  • 力扣刷题——143.重排链表
  • 如何利用环境监控看板提升工厂生产质量和效率
  • 《信息系统安全》(第一次上机实验报告)
  • 无需邀请码,实在智能发布通用智能体-实在Agent
  • 智能,触手可及:揭秘高灵活、高精度仿生机器手的操作与实现
  • django怎么配置404和500
  • 体验中国传统文化、采购非遗文创,波兰游客走进上海市群艺馆
  • 智利观众也喜欢上海的《好东西》
  • 临港新片区:发布再保险、国际航运、生物医药3个领域数据出境操作指引
  • 1450亿元!财政部拟发行2025年中央金融机构注资特别国债(二期)
  • 2025柯桥时尚周启幕:国际纺都越来越时尚
  • 来论|建设性推进缅北和平进程——中国的智慧与担当