lq

news/2025/2/21 20:26:57/文章来源:https://www.cnblogs.com/yythm/p/18730114

类型转换

自动转换

低到高

强制转换

int a = 0;
long b = (long) a;

for循环

for(int i = 0;i < 5;i++){...
}

增强for

int []a = new int [10];
for(int x:a)(sout(x);
)

方法

public static int max(int n1,int n2){return (n1 > n2 ? n1 : n2);
}

方法重载

//相同名字,不同参数列表
public static int max(int n1){return;
}

类与对象

Java类与对象详解

1. 类(Class)

  • 定义:类是对象的蓝图或模板,用于描述一类对象的共同属性和行为。

  • 组成

    • 属性(成员变量):描述对象的特征(如颜色、品牌)。
    • 方法(成员函数):定义对象的行为(如加速、刹车)。
    • 构造方法:用于初始化对象(与类同名,无返回值)。
  • 示例

    public class Car {// 属性private String color;private String brand;private int speed;// 构造方法public Car(String color, String brand) {this.color = color;this.brand = brand;this.speed = 0;}// 方法public void accelerate(int increment) {if (increment > 0) {speed += increment;}}public void displayInfo() {System.out.println("品牌:" + brand + ",颜色:" + color + ",当前速度:" + speed + "km/h");}
    }
    

2. 对象(Object)

  • 定义:对象是类的实例,拥有类中定义的属性和方法。

  • 创建对象:使用 new 关键字调用构造方法。

    Car myCar = new Car("红色", "丰田"); // 创建一个Car对象
    
  • 访问属性和方法:通过点号 . 操作。

    myCar.accelerate(20);   // 调用方法
    myCar.displayInfo();    // 输出:品牌:丰田,颜色:红色,当前速度:20km/h
    

3. 类与对象的关系

  • 类比:类像建筑设计图,对象是按图纸建成的房子。

  • 独立性:不同对象属性独立。例如:

    Car yourCar = new Car("蓝色", "本田");
    yourCar.accelerate(30);
    // myCar和yourCar的速度互不影响
    

4. 封装(Encapsulation)

  • 目的:保护数据,隐藏实现细节。

  • 实现:将属性设为 private,通过公有方法访问。

    public class Car {private int speed;// Getter方法public int getSpeed() {return speed;}// Setter方法(带校验)public void setSpeed(int speed) {if (speed >= 0) {this.speed = speed;}}
    }
    

5. 静态成员(static)

  • 归属:属于类本身,而非对象。

  • 示例

    public class Car {private static int numberOfCars = 0;public Car() {numberOfCars++; // 每创建一个对象,计数器+1}public static int getTotalCars() {return numberOfCars;}
    }
    
    System.out.println("已创建汽车数量:" + Car.getTotalCars()); // 直接通过类名访问
    

6. 完整示例

public class Main {public static void main(String[] args) {Car myCar = new Car("红色", "丰田");myCar.accelerate(20);myCar.displayInfo(); // 输出:品牌:丰田,颜色:红色,当前速度:20km/hCar yourCar = new Car("蓝色", "本田");yourCar.accelerate(30);yourCar.displayInfo(); // 输出:品牌:本田,颜色:蓝色,当前速度:30km/h}
}

7. 关键区别

类(Class) 对象(Object)
抽象模板(定义属性/方法) 具体实例(占用实际内存)
程序编译时存在 程序运行时动态创建
通过 class 关键字定义 通过 new 关键字实例化

接口


一、接口是什么?

想象你要造一台手机,先列出一个「必须有的功能清单」:

  • 打电话
  • 发短信
  • 能充电

这个清单就是「接口」!它不管手机怎么实现这些功能,只规定「必须要有这些功能」。

用代码表示:

// 定义接口(功能清单)
interface Phone {void call();   // 打电话(没有具体实现)void sendSMS();// 发短信void charge(); // 充电
}

二、接口怎么用?

假设你要造一个华为手机,必须按照接口的清单实现所有功能

// 实现接口(具体造手机)
class HuaweiPhone implements Phone {// 必须实现接口的所有方法!public void call() {System.out.println("用5G打电话");}public void sendSMS() {System.out.println("发送带表情的短信");}public void charge() {System.out.println("超级快充");}
}

三、为什么要用接口?

场景1:统一标准

  • 所有手机都必须实现相同的功能,但实现方式不同
  • 比如苹果手机的充电方式可能和华为不同

场景2:灵活扩展

  • 你可以同时让手机支持「拍照功能」的接口
class HuaweiPhone implements Phone, Camera {// 实现两个接口的功能
}

场景3:隐藏细节

  • 用户只需要知道「能打电话」,不需要关心是4G还是5G实现的

四、接口的特性(记住这3点)

  1. 不能直接创建对象(就像不能直接使用「功能清单」打电话)

    // 错误!
    Phone p = new Phone(); // 正确:用实现了接口的类
    Phone p = new HuaweiPhone();
    
  2. 所有方法默认是抽象的(Java 8前)

    • 没有方法体(即没有{}中的具体代码)
    • 实现类必须重写所有方法
  3. 变量默认是常量(自动加public static final

    interface USB {int VERSION = 3; // 等同于 public static final int VERSION = 3;
    }
    

五、接口 vs 抽象类

最容易混淆的问题!一张表看懂:

接口(interface) 抽象类(abstract class)
方法 默认全是抽象方法 可以有抽象和具体方法
变量 只能是常量 可以是普通变量
继承 类可以实现多个接口 类只能继承一个抽象类
设计理念 「能做什么」的能力 「是什么」的层级关系

通俗理解

  • 抽象类:比如「动物」抽象类,派生出「猫」「狗」
  • 接口:比如「会游泳的」「会飞的」,不同动物可以选择实现

六、实际例子:USB接口

1. 定义USB标准

interface USB {void transferData(); // 传输数据void plugIn();       // 插入
}

2. 不同设备实现

class Mouse implements USB {public void transferData() {System.out.println("传输鼠标移动数据");}public void plugIn() {System.out.println("USB-A接口接入");}
}class SSD implements USB {public void transferData() {System.out.println("高速传输文件");}public void plugIn() {System.out.println("USB-C接口接入");}
}

3. 使用接口

public class Computer {public static void main(String[] args) {USB device1 = new Mouse();USB device2 = new SSD();device1.plugIn();  // 输出:USB-A接口接入device2.transferData(); // 输出:高速传输文件}
}

七、Java 8 后的新特性

为了不增加初学者的负担,你只需要知道:

  1. 默认方法(default methods)
    接口中可以写具体实现的方法,用default修饰

    interface USB {default void showVersion() {System.out.println("USB 3.0");}
    }
    
  2. 静态方法
    直接用接口名调用

    interface USB {static void description() {System.out.println("通用串行总线");}
    }// 使用
    USB.description();
    

八、练习小任务

  1. 定义一个「动物」接口,要求有eat()sleep()方法
  2. 创建「猫」和「狗」类实现这个接口
  3. 尝试让「狗」类同时实现「会游泳」的接口

输入输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/887772.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10亿数据,如何做迁移?

前言 某次金融系统迁移项目中,原计划8小时完成的用户数据同步迟迟未能完成。 24小时后监控警报显示:由于全表扫描SELECT * FROM users导致源库CPU几乎熔毁,业务系统被迫停机8小时。 这让我深刻领悟到——10亿条数据不能用蛮力搬运,得用巧劲儿递接! 今天这篇文章,跟大家一…

2025.2.21的模拟赛题“糖果”题解

2025.2.21的模拟赛题“糖果”题解为避免混淆,题目中的 \(X\) 在下文中为大写。 称前 \(k-1\) 次操作成为1号操作,第 \(k\) 次(不含)以后的操作称作2号操作 设 \(f_{x,i,j}\) 表示在 \(x\) 的子树中,1号操作做了 \(i\) 次,2号操作做了 \(j\) 次 限制就是\(X\) 到跟的路径不…

【飞书】Zabbix 7.2 告警与飞书机器人深度联动的全流程

midnight, the sound of a phone buzzing wakes you up abruptly. "又是告警!"你猛地从床上坐起,眼睛酸涩地盯着手机屏幕。作为一名运维工程师,这样的场景几乎成了家常便饭。无论是深夜还是清晨,系统故障总能找到你的联系方式,仿佛在提醒你:科技24小时不眠不休…

Windows平台上Idea、Tomcat、浏览器页面显示乱码问题解决

核心:乱码问题是由于字符编码不一致导致的,所以解决乱码问题的核心概念是统一字符编码。首先我们查看各个平台的字符编码: Windows cmd中输入chcp 命令查看(Windows系统默认字符编码时GBK)936 代表 GBK 65001 代表 UTF-8 注意:通过chcp命令如 chcp 65001 来更改字符编码只…

关于 xrlong 是神的论证

xrlong orz搜索内容搜索结果__________________________________________________________________________________________本文来自博客园,作者:CuFeO4,转载请注明原文链接:https://www.cnblogs.com/hzoi-Cu/p/18729881

idea插件+cursor使用技巧

cursorignore配置# Compiled files *.class *.jar *.war# Build directories target/ build/# IDE files .idea/ *.iml .vscode/ .project .classpath .settings/# Logs *.log logs/# Temporary files *.tmp *.bak *.swp# Maven specific .mvn/ mvnw mvnw.cmd# Spring Boot spe…

设计测试用例方法 -经验方法(三种)

1、基于经验的测试技术之错误推测法 错误推测法也叫错误猜测法,就是根据经验猜想,已有的缺陷,测试经验和失败数据等可能有什么问题并依此设计测试用例2、基于经验的测试技术之异常分析法 系统异常分析法就是针对系统有可能存在的异常操作、软硬件缺陷引起的故障进行分析,依…

DeepSeek 即将发布 5 个开源项目;Cartesia Voice Changer:声音转换、克隆和实时语音翻译丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

Spring复习-注解开发

@Component 基本Bean注解,主要是使用注解的方式替代原有xml的 标签及其标签属性的配置使用@Component 注解替代标签使用:再类上使用 @Component(value = "userDao") //若没有配置value,默认使用类名作为beanName public class UserDaoImpl implements UserDao { }…

测试用例编写技巧

一、用例模板 模板1:模板2:模板3:二、用例的来源 (1)公司就有模板 (2)自己设计模板 (3)用例管理工具种导出模板 三、写用例的核心要素 用例编号、用例标题、前置条件、用例步骤,预期结果、优先级(必填) 系统名称、模块名称、用例创建时间、用例类型、实际结果、执行…

利用deepseek,体验ai写代码

vscode利用cline接入火山引擎deepseek,免费体验ai写代码。注册火山引擎,开通deepseek服务进行火山引擎官网https://www.volcengine.com/,进行注册。进入控制台,访问火山方舟在左侧下拉菜单选择开通管理,开通模型,由于我已经开通过R1模型,以DeepSeek-R1-Distill-Qwen-32B…

测试用例编写

模板1:模板2:模板3:二、用例的来源(1)公司就有模板(2)自己设计模板(3)用例管理工具种导出模板三、写用例的核心要素用例编号、用例标题、前置条件、用例步骤,预期结果、优先级(必填)系统名称、模块名称、用例创建时间、用例类型、实际结果、执行时间(非必填项)四…