java 一层一层,Java 基础-类 大厦的一层的认识

Java 基础-类 大厦的一层的认识

一.Java 中的类

Java是面向对象的,所以他的程序是以Class为基本组成单元。

类建立的步骤包括:定义类名、属性和方法。

二.成员变量和局部变量、属性

成员变量与局部变量区别

程序中位置不同,一个是方法外,一个是方法内,这就决定了他们的作用域不同。

Java会给成员变量赋初始值,而不会给局部变量赋初始值。

属性

使用函数get/set方法,修改属性的值,约定方法。这个地方C# 已经进行了优化,添加了set和get访问器。

三.类的构造方法

Java与C#的规则相同。

自己写了有参的构造方法,系统就不会自动生成无参的构造方法。

初始化块

Java 中可以通过初始化块进行数据赋值。且执行的优先级高于构造方法。静态初始化块的优先级最高。

静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

三. 类中方法

方法的定义

方法的定义和C#等语言相同。

访问修饰符 返回值类型 方法名(参数列表){

方法体

}

public static void main(String[] args) {

//方法体

}

方法的重载

简单说,就是在同一个类中,函数名相同,函数的参数列表不同。

静态方法

静态方法中不能直接调用非静态方法。比如main 函数中,不能直接调用main函数外的非静态方法。

四、面向对象三大特性

封装、继承、多态。

五 封装

访问修饰符

和C# 大体相同,唯一不同的是,默认的访问可见性,存在包的概念。

//范围最小,对象自己可用

private

//对象自己,同一个包中可用(同一屋檐下)

默认

//对象自己,同一个包下,子类可用

protect

//所有

public

六、继承

和C#的概念相同,但是继承的方式有变化,增加的关键字是extends。

同样和C#不同的是,子类的父类叫super,通过super调用父类的方法和属性。

重写方法的形式也不同,Java会添加一个像注释的语言-@Override.

public class HuaweiSmartPhone extends Telephone{

final String series = "Honor";

@Override

public void call(int num) {

// TODO Auto-generated method stub

super.call(num);

System.out.println(series + " IS Mine!");

}

}

子类的初始化顺序

子类是从父类继承而来,故初始化顺序是:先初始化父类,再初始化子类。

子类的所有的构造函数,默认都会访问父类中空参数的构造函数。因为子类每一个构造函函数内的第一行都有一句隐式的super。当父类中没有空参数的构造函数时候,子类必须手动通过super语句形式来访问父类中指定的构造函数。

特殊的父类 –Object

所有的类都默认继承于object类。object类两个重要的方法是toString()和equals()方法,都可以方便的根据自己的需要书写。

七、多态

引用的多态、方法的多态

引用可以在子类、父类之间传递,导致运行时类型不同,同样造成调用的方法根据运行时类型,调用的方法不同。

//老父亲,假借子子孙孙之手,完成自己的目的,生活可以如此多姿多彩,儿子多就是好。----多态

HuaweiSmartPhone myPhone = new HuaweiSmartPhone();//父类是个小类型,

Telephone phone = myPhone;//父类的引用指向子类,反之则不行:引用的多态

phone.call(8);//方法的多态,就近原则

// phone = myPhone;//大类型的可以转换成小类型。

// myPhone = (HuaweiSmartPhone)phone;//强制类型转换 instanceof

if (phone instanceof XiaomiSmartPhone) {//校验phone运行时类型,是否可以转换成XiaoXi

XiaomiSmartPhone herPhone = (XiaomiSmartPhone)phone;

herPhone.call(89);//运行时类型为H

}

八、抽象类

和C# 定义相同,关键字 abstract。

主要目的:不关注子类的实现,约束子类的一些特征。

不能直接创建,可以定义引用变量。

//Telephone 为抽象类,目的:不关注子类的实现,约束子类的一些特征

Telephone phone = new HuaweiSmartPhone();

//利用多态,实现个性特征,有接口的味道

phone.Show();

phone = new XiaomiSmartPhone();

phone.Show();

九、接口

接口时一种规范,定义了一批类所遵循的规范,用来约束类。

//定义

public interface MyInterface extends Parent {

//常量定义

[public static final] String Names;

//抽象方法定义

[public abstract ] void Show();

}

//实现一个接口的类

public Class HuaweiSmartPhone extends Telephone implements ITelephone{

}

// 接口操作举例

//接口的操作

IPlayGame iPlayGame = new HuaweiSmartPhone();

iPlayGame.playGame();

更快速的匿名内部类

//匿名内部类

IPlayGame iMyselfPlayGame = new IPlayGame() {

@Override

public void playGame() {

// TODO Auto-generated method stub

System.out.println("I play myself!");

}

};

iMyselfPlayGame.playGame();

new IPlayGame() {

@Override

public void playGame() {

// TODO Auto-generated method stub

System.out.println("I play myself!!!");

}

}.playGame();

十、租车系统项目练习分析

数据模型分析

现实世界的事物抽象出数据结构。

业务模型分析

明确该程序需要执行哪些业务。

可以同时满足工厂和消费着的需求。

显示和流程分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值