面向对象-JAVA方法解析

17、Java 面向对象编程:类继承与方法重写深入解析 本文深入解析了Java面向对象编程中的核心概念——类继承与方法重写。内容涵盖了Object类的作用、继承的本质、避免‘涟漪效应’的策略、派生类的规则、super关键字的使用、私有特征的处理以及最佳实践建议。通过示例代码和实际应用案例,帮助开发者更好地掌握继承与重写的实现方式及注意事项,提升代码质量与可维护性。 阅读详情

面向对象-JAVA方法解析

一、方法的组成及调用

Java常用方法这个术语来标示“做某些事情的方式”。java的方法决定来一个对象能接收什么样的消息。
方法的基本组成部分包括:名称、参数、返回值和方法体。

  • 返回类型:描述的是在调用方法后从方法返回的值。
  • 参数列表:给出了要传给方法的信息类型和名称。
  • 方法名和参数列表唯一地标识出某个方法。

java中的方法只能通过类的一部分来创建,方法只能通过对象才能调用,且这个对象必须能执行这个方法的调用。通过对象来调用方法时,需要先列出对象名,紧接着是句点,然后是方法名和参数列表。如:

student.name("张三");

例如,假设有一个无参的方法f(),返回类型是int。有一个名为a的对象,可以通过他调用f( )。可以这样写:

int x = a.f(); //返回值类型必须与x的类型兼容

这样的调用行为被称为发送消息给对象。消息是f( ),对象是a。
面向对象的设计通常简单地归纳为"向对象发送消息"。

二、参数列表

方法的参数列表指定要传递给方法什么样的信息。这些信息像java中的其他信息一样。采用的都是对象形势。因此,在参数列表中必须指定每个所传递对象的类型和名字。像java中任何传递对象的场合一样,这里面传递的实际上也是引用。引用的类型必须正确。否则编译器将抛出错误。

假设某个方法接收String为其参数,下面是具体定义。他必须置于某个类的定义内才能被正确编译,例如:

int storage(String s ){
	return s.length()*2;
}

此方法告诉你,需要多少个字节才能容纳一个特定的String对象中的信息。
通过上面的例子,我们可以了解到return关键字的用法。他包含两方面:
首先,代表“已经做完,离开此方法”,其次如果此方法产生一个值,这个值要放在return语句后面。

可以定义方法返回的任意类型,如果不想返回任何值,可以指示方法返回void(空),例如:

boolean flag(){return true;}
void nothing(){reruen;}
void nothing2(){}
13、Java面向对象编程:访问器方法与封装的深度解析 本博客深入探讨了Java面向对象编程中的访问器方法与封装机制。通过详细分析访问器方法的实现、封装的重要性以及在类自身方法中使用访问器的最佳实践,展示了如何通过这些技术提高代码的安全性、可维护性和可扩展性。此外,博客还通过实际案例解析了这些概念在学生管理系统中的应用,并展望了它们在未来技术趋势中的发展方向。 阅读详情

相关推荐

65、Java面向对象编程:继承与方法重写深入解析

本文深入解析了Java面向对象编程中的继承与方法重写,通过具体示例介绍了如何实现继承关系、区分方法重写与方法重载、合理处理属性访问方式等内容。同时讲解了抽象类、最终修饰符以及所有类的基类Object类的相关概念,帮助开发者更好地掌握面向对象编程的核心思想和实践技巧。

h9j8k7l6m5n的博客 55

【Java】P8 面向对象编程完全指南(S1-1 基础篇 属性与方法及内存解析)

是一个模板,是对一类具有相同特征事物的抽象描述。是类的实例,是实际存在的个体举个例子🌰"手机"是一个类,你手里的iPhone、华为Mate60就是具体的对象"学生"是一个类,张三、李四、王五就是具体的学生对象面向对象编程是Java的核心思想,也是现代软件开发的主流范式。更好地组织代码:将相关的数据和行为封装在一起提高代码复用性:同一个类可以创建多个对象简化复杂问题:将大问题分解为多个对象的交互便于维护和扩展:修改某个类不会影响其他类面向对象不仅仅是一种编程技术,更是一种思维方式。

weixin_43098506的博客 2100

一文详解AUTOSAR COM ComSignal结构体

ComSignalLength指定信号的长度,以字节为单位,影响数据的解析范围和精度。比如车速信号若为UINT16类型,ComSignalLength=16。这里需要注意必须ComSignalLength与ComSignalType匹配(比如FLOAT32类型需配置ComSignalLength=32),超出实际物理值范围时需配置缩放(Scaling)参数。ComSignalType定义信号的物理数据类型,决定如何解析原始字节数据。

menghuyouyou的博客 943

Java面向对象核心:面对对象的三大特性、对象、变量、方法深度解析

本文系统介绍了Java面向对象编程的核心概念。面向对象以类和对象为基础,通过封装、继承和多态三大特性实现代码组织。重点解析了变量的三种类型(局部、实例和静态变量)及其内存管理机制。详细阐述了方法的分类(实例方法、静态方法、构造方法和抽象方法)以及方法重载的实现方式。特别讲解了this关键字的四种用法:解决命名冲突、实现链式调用、构造方法调用和作为参数传递。这些基础概念是构建Java应用的核心,深入理解它们有助于掌握面向对象编程思想。

2401_88246316的博客 1669

Hive数据迁移

【迁移背景】 本次需要将老集群的hive数据(共30多张表)迁移至新集群中。 老集群版本为CDH5.13,未启用kerberos; 新集群版本为CDH5.14,启用了kerberos。 由于cloudera官方文档说明,在5.x的版本不支持从未启用kerberos的集群与启用了kerberos的集群之间的数据复制。因此无法通过bdr方式进行数据同步。于是采用手工方式进行测试验证。 第一步...

wangkuangood3200的专栏 469

Halcon图片拼接避坑指南:特征点匹配常见问题与解决方案

本文深入解析Halcon图片拼接中特征点匹配的常见问题与解决方案,涵盖特征点提取、匹配优化及变换模型选择等关键环节。针对工业视觉检测中的拼接错位、重影等问题,提供参数调优、图像预处理和算法选择等实战技巧,帮助开发者高效避坑并提升拼接精度。

weixin_28694169的博客 199

java关于面向对象的(方法)基础解析

关于方法的特性

2301_78107269的博客 779

Trustzone/TEE/安全 面试100问-目录

关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CCA视频、学习资料下载、免费学习资料、免费 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,十年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计

baron-周贺贺-代码改变世界ctw 652

【Java从方法到面向对象】核心概念与实战解析

全面掌握Java方法到面向对象

2501_93512623的博客 989

基于STM32L4XX、HAL库的ESP32-S3-WROOM-1-N4 WIFI模块驱动程序设计

/ 检查是否收到完整的一行(以\r\n结尾)// 例如: 解析AT命令响应或MQTT消息等。// UART2初始化已在CubeMX中配置。// USART2初始化函数(由CubeMX生成)// 缓冲区溢出,重置。// 如果需要等待响应。// 处理接收到的数据。// 处理接收到的数据。// 等待ESP32模块启动。// 主循环其他任务。// 启用UART全局中断。// 发送HTTP GET请求。// 发送AT测试命令。// 连接Wi-Fi。// UART中断回调函数。

zhusl6688的博客 286

基于STM32F103C8T6的智能蓝牙手环系统设计与实现

摘要:本文设计并实现了一款基于STM32F103C8T6单片机的智能蓝牙手环系统。该系统集成了ADXL345加速度计、DS18B20温度传感器、plusesennor心率模块和BT06蓝牙模块,实现了心率(±2bpm)、体温(±0.5℃)、步数(±3%)等健康数据的实时监测与显示。通过OLED屏提供人机交互界面,支持蓝牙APP远程控制,具备自动步数清零、异常提醒等功能。测试表明系统各项功能均达到设计要求,响应时间0.1-0.5秒,心率检测准确率98%,体温检测准确率99%,功耗50mA(工作)/10mA(待

3254968421的博客 206

Java菜鸟学习之路之面向对象---面向过程与面向对象概述、Java类得成员属性和方法、对象得内存解析详解(八)

前言: 骚年们,我AE86_HAN又回来了,面向对象课程得讲解也终于要开始了,说讲解也有些言过其实了,只是自己再次重写面向对象时,会有一些新的感悟与体验经验分享给大家,便于大家更快得理解面向对象得编程思想。 QAQ!!! 1.面向过程(POP)与面向对象(OOP)概述 1.1二者都是一种思想,面向对象是相对于面向过程而言的。 面向过程,强调的是功能行为,以函数...

AE86_han的博客 712

MATLAB - 使用 RRT 进行挖掘机运动规划

本例演示了如何使用运动规划器在包含障碍物的环境中为挖掘机规划路径。在此示例中,您将以运动树的简化形式为挖掘机建模,然后使用基于采样的运动规划器确定挖掘机在存在障碍物的两个姿势之间的可行路径。在 Simscape™ 多体™ 模型中模拟结果。

机器人控制与仿真应用 1850

java总结1、类和对象的关系解析、如何创建类,如何创建对象,如何调用属性和方法、 构造方法与一般方法的区别、方法重载与重写的区别、解析面向对象的三大特征

面向对象一、类和对象的关系解析二、如何创建类,如何创建对象,如何调用属性和方法1.创建类2.创建对象3.调用属性和方法三、 构造方法与一般方法的区别1.共同点2.不同点四、方法重载与重写的区别1.方法重载:2.方法重写:3.区别:五、解析面向对象的三大特征1.封装2.继承3.多态 一、类和对象的关系解析 二、如何创建类,如何创建对象,如何调用属性和方法 三、构造方法与一般方法的区别 四、方法重载与...

qq_43189330的博客 1555

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1014

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java学习笔记—面向对象(上) 类|对象|内存解析|方法|重载|可变形参|递归|封装|权限修饰符

Java 学习笔记—面向对象(上)面向过程(POP)与面向对象(OOP)类和对象类和对象的使用(面向对象思想落地的实现) 面向过程(POP)与面向对象(OOP) 面向过程,强调的是功能行为,以函数为最小单位 面向对象: 类和对象 类(Class)和对象(Object)是面向对象的核心概念。 类:是对一类事物的描述,是抽象的概念上的定义。 对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)。 设计类其实就是设计类的成员 属性 = 成员变量 = field = 域、字段 方法 = 成员方

karenelise的博客 237

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java面向对象面试题解析:说下方法的覆盖和重载

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来。

2401_83641098的博客 629

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JAVA面向对象之静态变量 静态方法 内存解析

JAVA面向对象 构造方法 特点 无返回值 方法名与类名相同 形式: public 方法名(){ } 注意事项 1.如果你没写无参的构造方法 系统会给你提供一个无参的构造方法 2.如果我只写了有参的构造方法 这时系统就不会给你提供无参的构造方法 3.写类的时候 建议 无参有参构造方法全写 定义类书写顺序 成员变量 -&gt; 无参有参构造方法 -&gt...

沙漠皇帝本拉登 4060

JAVA面向对象 -方法调用的内存解析

当eat方法被调用时,会引入一个新的栈帧,会有一个入栈的动作,当方法调用完毕也随之出栈,方法消亡,随后我们调用sleep方法,在这个方法中我们有一个局部变量,也放在sleep所对应的栈帧里面,当此方法执行完毕,方法出栈,接下来我们调用interests方法,该方法被调用时产生一个新的栈帧,其内部局部变量也存在于该方法的栈帧之中,当其执行完毕,也会出栈,main方法时第一个进栈,则最后一个出栈,栈结构保持。动作,即 给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值。先进后出,后进先出的原则。

2401_83367907的博客 386

Java 面向对象之Point类实现:从构造方法到对象操作全解析

本文解析了Java中Point类的实现,重点讲解了构造方法重载、对象操作和关键知识点。主要内容包括:1. 补全代码中的4处空白,涉及拷贝构造方法参数、坐标平移、对象实例化和字符串输出;2. 完整代码展示了Point类的构造方法(无参、带坐标、拷贝构造)和操作方法(移动、平移等);3. 核心知识点详解构造方法重载、this关键字使用、方法设计逻辑和对象使用流程;4. 列举了常见错误和避坑指南,强调面向对象编程的封装性、构造方法重载和方法设计原则。该实现为理解Java面向对象编程基础提供了典型范例。

Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程 922

面向对象编程基础:Java中的构造方法与析构方法全面解析

Java中的构造方法和析构机制体现了其"自动化内存管理"的设计哲学。构造方法的核心价值保证对象创建时的有效状态支持灵活的对象初始化方式通过访问控制实现特殊设计模式析构机制的演进从不可靠的finalize()到AutoCloseable再到现代的Cleaner API反映了Java对资源管理认识的深化最佳实践演进构造方法设计趋向简单明确资源管理从手动到自动不可变对象模式日益重要未来发展趋势记录类(Record)简化不可变对象创建Valhalla项目可能引入值类型。

u012847288的博客 905

初识Java面向对象——在JVM中观察对象的创建与方法的调用

对象、属性和方法是Java面向对象程序设计学习者最先接触到的概念。此篇文章介绍了对象、属性和方法的基本概念和相关知识,并通过实例代码展示在JVM中对象创建的细节以及分析方法调用时的内存结构。

2301_79144003的博客 1049
上一篇: ArrayList详细介绍
下一篇: Json对象和Json字符串的区别
骆晨辉
博客等级 码龄8年 36粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值