从C++到Java --理解面向对象是关键所在

C++转Java学习总结 博主原本的语言是c++,好不容易上手了,刷算法题也熟练了一些,因为实习的缘故不得不开始接触java。下面总结一些c++和java的区别,有c++基础的人可以对照学习java。 一、从变量和数据类型上 1、数据类型 Java语言提供了八种基本类型,Java没有无符号整数。(无符号右移在Java中强制用三个右尖括号表示) 六种数字类型(byte,short,int,long,float,duble) 一种字符类型 (char) 一种布尔型 (boolean) 2、字符串 Java有内置类型String,而 阅读详情
从C++到Java --理解面向对象是关键所在 作者:张岩 发布时间:2001/04/06
 
文章摘要:
  如果你没有被流放到孤岛的话,那么你一定会听说了Java的出现对开发者和用户的潜在冲击了。在这篇文章中,我要强调一些C++与Java之间的不同。目的不是教授Java的编程方法,而是让读者注意到从C++转向Java的时候可能遇到的一些潜在的问题。本文将提供一个对这些概念的简明的解释,而不是提供一些深入的或者如何使用的问题。记住,这只是依据我对Java的经验带而提出的一些主要的差异。
       

正文: 


从C++到Java --理解面向对象是关键所在

  如果你没有被流放到孤岛的话,那么你一定会听说了Java的出现对开发者和用户的潜在冲击了。在这篇文章中,我要强调一些C++与Java之间的不同。目的不是教授Java的编程方法,而是让读者注意到从C++转向Java的时候可能遇到的一些潜在的问题。本文将提供一个对这些概念的简明的解释,而不是提供一些深入的或者如何使用的问题。记住,这只是依据我对Java的经验带而提出的一些主要的差异。

Java在虚拟机上运行
  Java源代码并不是被编译成为普通的机器代码。而是被翻译成为虚拟机可以执行的代码。一个Java解释器最终执行这些代码。这其中没有连接的过程;解释在需要的时候动态的加载一些类;如图所示:

  

Java是完全面向对象的

  Java是一种完全面向对象的语言。这意味着你对任何一个Java对象所做的动作都是通过一个方法实现的。第一点就是,再也没有没有主函数这样的孤立的东西了。取而代之的是,你必须开始用一个对象的看法看待一个程序,一个类的对象。但是这个对象又什么对象呢?大多数Java程序只是简单的通过继承Java基础类Object来实现所需要的东西,但是你可以通过创建程序基础类用于多个特性相似的应用程序来节省时间。
  严格的面向对象的规定意味着理用原有的C/C++代码不可以直接不加改动的使用;系统调用也是这样的。C++中,你可以通过在C++正常的命名空间外声明extern"C"来使用原有的C的过程调用,包括系统调用。
  在Java中,只有一个类似的安全回溯的方法,但是并不是十分简单的方法。你必须定义一个本地方法,其目的是为C语言提供接口,然后提供连接的介质。Java环境提供了完成这种任务的工具,但是整个过程和C++中提供的extern比微不足道,完成使用C++类的过程则更加复杂,因为这样会引入对C的借口和C函数和C++成员函数的问题。
幸运的是,许多常用的系统实用工具函数已经在系统类中的方法中提供出来,但是这些明显没有包含经过许多年来你所创建的那些类和过程。所以,在你需要的时候你应该去钻研一下。

Java中没有独立的头文件
  在Java中,关于类的一切东西都被放到一个单独的文件中。方法的位置只可能在一个地方出现,一个方法的实现必须在它的定义过程中同时进行。这样做得优点是在实现程序的时候不容易因为文件的非同步错误而失败,或者获取到一个没有实现的声明。类的声明可以被Java解释器利用甚至是从一个编译过的单元中获取,所以不再需要有头文件,只要有编译过的文件。
  这样做的缺点与我们编程的过程有关。许多C++程序员喜欢用头文件来代替文档。要看一个成员函数的接口参数,只需要看头文件中的声明即可。你可以经常的看头文件即可了解怎样去使用这个类。在Java中,没有这样的总结。因为实现类方法的代码必须在方法定义的时候出现,而且,对于一个单独的函数的代码来说就经常占据了一整页乃至更多。这样,很难通过看Java的代码就初步了解类是怎样使用的。你必须为你需要的类准备足够多的文档。不言而喻,再处理非商业类库的时候文档是极度缺乏的。
  在当先的Java环境中提供了两个工具来补偿这些,javap来打印类标识,javadoc为嵌入式程序提供HTML文档。

用Package来分解Java命名空间
  在大的C++工程中经常遇到的一个问题是命名空间--怎样保证工程的一些程序员不会创建和另一些程序员一样名字的类?更糟糕的是,供应商可能会提供一个包含和你的类一样名字的类的库。有许多方法可以解决这一问题,但是很可能在问题发现之前工程已经启动,改正错误是需要付出许多痛苦的。
  Java通过"Package"这个概念解决了这个问题,Package有效地通过通过集合类划分了命名空间。在不同包内的两个同名的类仍然是不同的。关键问题就变成了类是否放置到相应的包中。
  记住,Java并没有解决命名冲突的问题。扩展一个基类而引起了派生类的冲突。比如说,如果你最喜欢的供应商提供了一些类,然后你把它们用做基类并且派生有一个foo方法的类,当供应商提供一个新版本的类的时候就可能出现,如果供应商业也在新类中提供了一个foo的方法。

异常是Java的重要特性
  在C++中,异常和异常处理是十分深奥的事情;许多C++程序员从没有处理过它们甚至不知道它们是何物。异常是在正常的过程中出现的未预料的错误,因此,它们不会从方法中返回,或者作为参数传入;但是,它们不能被忽略!这里的一个例子是计算一个书的方根的方法。正常的接口形式是将一个正数作为参数传入方法,然后方法会返回一个正实数作为结果,方法可以检验这些并且在异常产生的时候抛出异常。在大多数系统中,程序员并不是必须这样做,这样,一个没有考虑到的异常可以使程序不正常的退出。
  在Java中,异常已经成为语言中非常成熟的部分。方法的说明中就包含了异常的信息,程序处理器也强制检验如果你使用了一个能够产生异常的方法,你就必须检查异常是否发生。几乎所有的Java程序员都会遇到异常的情况,因为许多非常有用的库中的类都会抛出异常。处理异常并不难,但是在一些时候是需要注意的。一个方法的文档会指明方法抛出的异常的类型。如果你忘了,不要紧,编译器会提醒你的。

字符串不再是字符数组
  Java中包括了一个字符串的对象,并且是个常量。字符串不像字符数组一样,虽然可以简单的从一个字符数组构造一个字符串。你应该尽可能的用字符串代替字符数组,因为他们不会因为误操作而被覆盖。

Java限制了常量对象和方法
  在C++中,你可以正式的声明一个函数参数或者函数返回值为const类型,这样可以有效的防止对参数或者返回值的不正当修改。另外,你可以声明一个成员函数为const,表明它不可以修改任何他操作的对象。
  Java支持常量操作符,只读变量,这些通过final关键字实现。但是Java没有支持强制的使一个可写变量在函数传递、返回的过程中变为只读。或者定义一个不操作修改对象的常量方法。
  在Java中,这个省略带来的影响和在C++中相比就非常小了,这很大程度上因为字符串变量和字符数组的不同,但是这也带来一个引起错误的隐患。特别地,没有办法检验一个方法是否可以改动对象。

Java没有指针
  理解指针的概念是一个C或C++程序员最难应付的问题。指针也是错误产生的一大根源。Java中没有指针,对象的句柄直接作为参数传递,而不是传递指针。另外,你必须通过索引使用数组。这些都不是什么大问题。然而,没有指针是在写含有函数指针或者成员函数指针的系统的时候引起很大麻烦。这个问题在处理回调函数的时候更加显著。

Java没有参数化类型
  参数化类型提供了用一段程序处理许多相似程序的方法。一个例子就是开平方根的方法,它可以对int或者float操作。在C++中,这一特性是由模板提供的。
  Java中不包含C++中的模板的等价物。如果你经常使用模板来简化程序,比如说构造许多使用相似参数类型的函数,这简直就是灾难。这意味着更多使用复制、粘贴的过程来手动的完成。然而,如果你使用模板来生成类的话,没有简单的方法。

Java使用垃圾回收
  在垃圾回收的语言中,运行时环境一直监测哪些内存不被使用。当一块内存不用的时候,系统自动的回收内存。比如说,一个对象在一个方法中生成,但是没有被调用着返回或者没有储存为全局变量,不能在方法外部使用。系统自己会知道哪些变量是你用不到的,哪些是可以用到的。因此,你不必再为破坏对象回收内存而担心。在C++中,很多的调试时间都被使用到检查内存漏洞中。Java的这种方法很大程度上降低了这种错误的可能。但是他依然不能处理逻辑混乱的程序,他们不能够被回收。许多C++的类中的析构函数是用来释放对象引用的内存的。Java使垃圾回收的事实说明在Java中不是必需写析构函数了。但是并不意味着你可以忘记为你的类写析构函数。比如,一个对象打开了网络连接就必须被恰当的清理来关闭这个连接。在Java中,析构函数被称作"finalization"方法。

Java不支持多重继承
  在任何一个复杂的面向对象的系统中,实现一个有更多方法的新类是十分经常遇到的事情。比如说,一个Manager类,需要被作为一个连表的表头,但是一个Manager又必须是一个Employee。有许多方法来处理这样的问题。一个方法是允许从多个类继承。在这个例子中,Manager需要从Linked List和Employee继承。
  Java没有多重继承。但是你可以声明接口--来描述实现一些功能的编程接口。一个类可以由多个接口实现,包括他唯一的功能。不同的类可以由同样的接口实现。方法的参数既可以声明为类,也可以声明为接口。如果是接口的话,实现接口的类就可以作为参数传入方法。
  接口的概念要比多继承容易理解一些,但是他有一定的局限性。特别地,你必须在类中实现接口的时候编码去重新实现类的功能。

Java支持多线程
  多线程可以使你写出在同一时刻完成多种任务的程序。比如说,你可以在完成读取一个大文件之间允许用户对已经读取的部分进行编辑。你需要把程序分为多线程来执行。为安全起见。你的程序要被精心的设计,因为可能不止一个线程需要对数据进行访问、修改。
  Java开始就支持多线程。类和接口用来分解一个程序成为不同的线程。语言简单的对重要的数据作同步或者锁定处理。

Java以一些预定义的类为基础
  默认的Java环境中包括一些从Java基础类实现而来的一些包。这些允许你很快的写出一些有用的程序,这些包如下:
  java.awt:当今许多应用程序都非常依赖GUI,java提供了一个Abstract Window Toolkid,这可以让你在不考虑运行平台的前提下处理GUI对象。
  java.applet:applet的主要目的是提供浏览有关的内容。它本身是awt组件的字类并且支持其他一些特性,比如声音、渲染等。
  java.io:java.io提供了对流、文件、管道的读写操作。
  java.lang:提供了java的基础类Objcet,Integar,Float……;
  java.net:提供对网络编程的支持。包括处理socket,URL,Internet寻址等。
  java.util:为数据结构提供的通用实用工具集。

总结
  许多人都说过Java要比C++好学,把它当作一种突破。有一些Java的特性要比C++简单一些,但是学习与严重的难度和语言关系不大,而是基本的面向对象的概念。如果你懂得这些,学习Java语法就显得格外轻松。如果不这样的话,你会发现Java和C++一样让人迷惑不解。

作者会员名:watermark

 
C++转Java快速入门                 博主有C++基础,想学Java。以下内容是我边学边写的,主要通过与C++做一些对比来快速入门。         1、JDK、JRE与JVM 阅读详情

相关推荐

C++与Java面向对象编程特性比较指南

面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件应用程序和计算机程序。它将数据和方法封装成单一的单元,通常称为类,并通过创建这些类的实例来操作数据。本章将引领读者入门,介绍OOP的核心概念,包括类与对象、继承、封装以及多态,为后续章节的深入探讨奠定基础。C++由Bjarne Stroustrup在1980年代初期在贝尔实验室开始设计和实现,它的设计初衷是作为一种支持数据抽象和面向对象编程的改进版本的C语言。

weixin_30661119的博客 718

Java与C++的优劣:谁更胜一筹?

1.基础介绍 Java与C++都拥有相当长的历史,且语法相当类似,并被众多业界巨头所采用。事实上,Java本来就是从C++衍生出来的。 不过尽管相似,二者之间仍然存在显著区别。很多人都说会C++就能会快掌握Jave。C++是不好学,但是我告诉你java也不好学。C++难是难在语言本身,java难是难在各种框架和库。你单纯学个java语法,你什么玩意也做不了,java的东西都在java之外。

break_cycle的博客 1万+

百元DIY手机荧光计:低成本荧光检测平台搭建与实战

荧光检测是一种基于物质受特定波长光激发后发射更长波长荧光的分析技术,其核心原理在于光与物质的相互作用。通过选择性激发与检测,该技术能实现对痕量物质的高灵敏度、高特异性定量分析,在生物医学、环境监测和食品安全等领域具有重要价值。传统荧光分光光度计虽精度高,但成本昂贵、体积庞大且操作复杂,限制了其在现场快检和普及教育中的应用。本文聚焦于如何利用智能手机的高性能摄像头和处理器,结合低成本光学滤光片和LED光源,构建一个便携、经济的DIY荧光检测平台。该方案通过简化光路设计,采用带通滤光片进行波长选择,并利用图像处

weixin_34194829的博客 304

c++转JAVA之路

本人是五年C++开发工程师,说道转型JAVA,也是实属无奈之举。 近年来随着科技的进步,各种语言层出不穷的大环境下,C++在应用层的需求越来越少,用c++做应用程序的公司日益减少,以至于我每次换工作都很困难。 这次转JAVA实属无奈,入职时以为公司有很多做C++的,结果来了之后发现只有两个C++,我是其中一个,可是好不容易有了工作,不能说不干就不干吧。加之家里的经济压力也比较大,只能先走一步...

wkk521000的博客 8564

告别玄学调参:手把手教你用20元件模型搞定GaN HEMT高频仿真(附S参数提取避坑指南)

本文详细介绍了如何使用20元件模型优化GaN HEMT高频仿真,解决传统16元件模型在10GHz以上频段的误差问题。通过S参数提取避坑指南和实战案例,帮助工程师精准建模分布式电极效应和寄生反馈路径,提升射频电路设计效率。

weixin_42523693的博客 441

ENVI SARscape安装全攻略:从下载到汉化一步到位(附最新试用申请链接)

本文提供ENVI SARscape从下载安装到汉化的完整指南,特别针对InSAR(合成孔径雷达干涉测量)分析环境搭建。详细介绍了系统要求、分步安装流程、汉化优化方法及硬件加速配置,并分享数据处理验证和常见问题解决方案,帮助用户高效搭建遥感数据分析平台。

rnn9storyteller的博客 1406

会c语言就会Java么_会C语言学Java好学么?

随着IT行业的发展越发的火爆,Java的应用越来越广阔,越来越多的人加入IT行业,进行Java的学习与开发,最近听到一些会C语言的人问,我有C语言基础,转业学Java好不好学?那今天我们就这个问题深入探讨一下,会C语言转学Java好学还是不好学。首先Java是因为撰写C++语言程序时的困难而研制开的,起先,只是一个消费性电子产品大计划中的一部份,C++语言是当初被考虑采用的,但从一开始的编译问题一...

weixin_39528029的博客 1379

(一)PyBullet机器人仿真入门:从环境搭建到实例解析

本文详细介绍了PyBullet机器人仿真平台从零开始的完整入门指南。内容涵盖环境搭建、官方示例解析、核心操作(连接、世界与模型)、关节控制与状态读取,以及碰撞检测、传感器模拟等高级功能,帮助读者快速掌握这一强大的机器人仿真工具。

weixin_29062865的博客 1374

从C++到Java --理解面向对象是关键所在

从C++到Java --理解面向对象是关键所在 本文将提供一个对这些概念的简明的解释,而不是提供一些深入的或者如何使用的问题。记住,这只是依据我对Java的经验带而提出的一些主要的差异。 Java在虚拟机上运行  Java源代码并不是被编译成为普通的机器代码。而是被翻译成为虚拟机可以执行的代码。一个Java解释器最终执行这些代码。这其中没有连接的过程;解释在需要的时候动态的加载一些类; J...

weixin_30666943的博客 87

手把手拆解固态电池成本:2030年真能比液态电池便宜30%吗?

本文深度解析固态电池成本结构,探讨2030年实现比液态电池便宜30%的可行性路径。通过拆解正极材料、负极材料和固态电解质的成本演变,分析关键技术对降本的影响,并预测产业链协同效应下的成本优化趋势。文章指出,在材料创新、设备国产化和政策支持等多重因素推动下,固态电池有望在2030年实现显著降本目标。

kite3的博客 401

保姆级教程:从Navicat 11/12到15,平滑升级搞定MySQL 8.0的caching_sha2_password认证

本文提供从Navicat 11/12升级到15的保姆级教程,重点解决MySQL 8.0的caching_sha2_password认证问题。详细介绍了备份配置、新版本功能亮点、跨平台安装步骤、配置迁移流程以及高级使用技巧,帮助用户平滑过渡到Navicat 15,提升数据库管理效率。

weixin_33724046的博客 203

从C++到Java --理解面向对象是关键所在 (转)

从C++到Java --理解面向对象是关键所在 (转)[@more@]从C++到Java --理解面向对象是关键所在 作者:张岩 发布时间:2001/04/06 文章摘要:   如果你没有被流放到孤岛的话,那么你一定会听说了...

csd3176的博客 95

LD分析实战:基于Plink和R的连锁不平衡计算与可视化全流程

本文详细介绍了基于Plink和R的连锁不平衡(LD)分析全流程,包括基因型数据预处理、LD计算参数设置及结果可视化技巧。通过实战案例解析PLINK文件格式转换、r²值计算关键参数,并展示如何使用ggplot2绘制高质量LD热图,帮助研究人员高效完成基因组关联分析。

weixin_29074295的博客 319

【CPP11?】结合CPP发展历史来理解CPP11

由C到CPP的大概历史是如何的?CPP是一门怎样的语言?想必浏览本文将会对此有一些初步的认识,本文是结合历史来介绍CPP的发展历程的。

BinaryWiker的博客 1261

YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

大家好!欢迎阅读本专栏。本专栏涵盖了YOLO8中C2f、主干网络、检测头、注意力机制、Neck等多种结构的创新,同时也包括了 YOLO相关的基础知识以及相关项目。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

对面向对象的理解

本篇博客主要记录一些对面向对象的理解,基础是C++计算机二级优秀。主要包括面向对象的本质、特性、原则、关系、UML图

yxc_71411的博客 1585

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java面向对象编程的理解

面向对象编程(OOP)是一种将软件开发与现实世界模型相结合的编程范式,通过封装、继承、多态和抽象等特性,极大地提高了代码的可读性和可维护性。OOP允许开发者创建更灵活和可扩展的系统,简化复杂性,使得大型项目的开发和维护变得更加高效。Java作为一种流行的OOP语言,以其跨平台特性和强大的社区支持,成为现代软件开发的主流选择,适用于各种企业级应用和移动开发。

2301_81311226的博客 1981

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java面向对象如此抽象该如何理解

类与对象 首先我要知道社么是类,什么是对象,就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。举一个例子说明下类,比如People(人)就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“姓名、身高、体重”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法。总之类就...

Wozaizuomeng的博客 766

C++中面向对象的理解

1、对于OO(面向对象)的含义,并不是每个人的看法都是相同的。即使在现在,如果问十个人,可能会得到15种不同的答案。几乎所有的人都会同意继承和多态是OO中的概念。大多数人还会再加上封装。还有一些人会加上异常处理,而可能会没有人将模板也包含进去。问题的关键在于:对于某个特性是否是属于OO的,往往都存在着不同的观点,而每一种观点都有着热情的拥护者。 2、C++的标准化工作对C++最重要的贡献

脚踏实地,用心编写出客户满意的代码,为公司创造出应有的价值。 1709

java面向对象的理解_为什么更多人选择了java,而不是c++,老码农来告诉你!

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。换种说法java是是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。语法基于c,因此学习起来完全不费...

weixin_39774682的博客 3203

java面向对象的理解_java胜于C语言,却又静态面向对象,简单?

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、We...

weixin_39818014的博客 2537

Java的特性与C++的区别

总之,Java和C++都是非常流行的编程语言,它们各自具有独特的特点和优势。System.out.println("较大的数是:" + max);cout << "较大的数是:" << num1 << endl;cout << "较大的数是:" << num2 << endl;System.out.println("请输入第一个整数:");System.out.println("请输入第二个整数:");cout << "请输入第一个整数:";cout << "请输入第二个整数:";

2301_79903190的博客 1932

Java和C++的联系与区别

  编程语言界的两大佼佼者 Java 和 C++ 在TIOBE榜单中常年名列前茅,尤其 Java 更是经常问鼎TIOBE,可见这两门语言的受欢迎程度之高。因为 Java 和 C++ 的风格比较像,但主要用途、特性有些不同,所以有必要了解了解它们的关系和差异。   在了解他俩的关系之前我们先熟悉一下这两门语言的基本信息: C++ Java 创始人 Bjarne Stroustrup James Gosling 发布时间 1983 1995 定位 高级语言 高级语言 基础 C C+

米碎师兄 1万+

Java和c++的区别!

Java和C++的区别: 1. Java源码会先经过一次编译,成为中间码,中间码再被解释器解释成机器码。对于Java而言,中间码就是字节码(.class),而解释器在JVM中内置了。 2. C++源码一次编译,直接在编译的过程中链接了,形成了机器码。 3. C++比Java执行速度快,但是Java可以利用JVM跨平台。 4. Java是纯面向对象的语言,所有代码(包括函数、变量)都必须在类中定义。而C++中还有面向过程的东西,比如是全局变量和全局函数。 5. C++中有指针,Java中没有,但是有引用。 6

lover_putter的博客 1万+
上一篇: 实施软件质量保障体系CMM/TSP/PSP的建议
下一篇: 深入浅出屏幕保护程序编程
CandyCat
博客等级 码龄26年 23粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值