黑马程序员_类的深入研究



黑马程序员_类的深入研究

类也是个对象
  * 其实类也是一个对象,是Class类型的对象,简称“类对象”
  * Class类型的定义
    typedef struct objc class *Class;
  * 类名就代表着类对象,每个类只有一个类对象


/*
 * 1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用

一次。
 * 2.当第一次使用某个类时,就会调用当前类的+initialize方法。
 * 3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
 *   先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
 */

// +initialize方法可以监听类在什么时候被使用,就是监听类的初始化过程.

#import <Foundation/Foundation.h>

/****************** Person ******************/
@interface Person : NSObject

@property int age;

+ void(test);

@end

@implementation Person

+ void(test)
{
 NSLog (@"Person --- +test");
}

// 当程序启动的时候,就会加载一次项目中所有的类,类加载完毕后就会调用+load方法;在类被加载的时候调

用; 系统自动调用
// 不管用不用,程序已启动就加载
+ (void)load
{
 NSLog (@"Person --- load");
}

// 当第一次使用这个类的时候,就会调用一次+initialize方法
+ (void)initialize
{
 NSLog (@"Person --- initialize");
}

@end

/****************** Student ******************/
@interface Student : Person

@end

@implementation Student

// 在类被加载的时候调用; 系统自动调用
+ (void)load
{
 NSLog (@"Student --- load");
}

+ (void)initialize
{
 NSLog (@"Student --- initialize");
}

@end

/****************** GoodStudent ******************/
@interface GoodStudent : Student

@end

@implementation GoodStudent

// 在类被加载的时候调用; 系统自动调用
+ (void)load
{
 NSLog (@"GoodStudent --- load");
}

+ (void)initialize
{
 NSLog (@"GoodStudent --- initialize");
}

@end

/****************** Person (MJ) ******************/
@interface Person (MJ)

@end

@implementation Person (MJ)

// 加载load的时候,类和分类的load都会被调用
+ (void)load
{
 NSLog (@"Person (MJ) --- load");
}

// 优先使用分类的initialize方法
+ (void)initialize
{
 NSLog (@"Person (MJ) --- initialize");
}

@end

/****************** main ******************/
int main()
{
 [[Person alloc] init];
 [[Student alloc] init];
 [[GoodStudent alloc] init];

 return 0;
}

void test1()
{
 Person *p = [[Person alloc] init];

 [Person test];

 // 内存中的类对象; 类对象就是类; 类名就是类对象
 Class c = [p class];

 [c test];

 Person *p2 = [[c alloc] init];
}

void test()
{
 // 利用Person这个类创建了2个Person类型的对象
 Person *p = [[Person alloc] init];

 Person *p2 = [[Person alloc] init];

 // 获取内存中的类对象
 Class c = [p class];
 Class c2 = [p2 class];

 NSLog (@"c = %p, c2 = %p", c, c2);

 // 获取内存中的类对象
 Class c3 = [Person class];

 NSLog (@"c = %p, c2 = %p, c3 = %p", c, c2, c3);

 // 类本身也是一个对象,是个Class类型的对象,简称类对象。

 /*
  利用 Class 创建 Person类对象

  利用 Person类对象 创建Person类型的对象
  */
}

<think>首先,用户的问题是:“我想获取黑马程序员提供的Java课程资料 请问黑马程序员 Java 课件 下载”。翻译成英文是:"I want to get the Java course materials provided by Heima Programmers. May I ask how to download the Java courseware for Heima Programmers?" 从系统指令中,我需要: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 另外,用户可见层指令:回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 参考提供的引用: - 引用[1]: 提供黑马程序员JAVA WEB全笔记PDF下载链接。 - 引用[2]: 提供传智播客黑马程序员Javaweb课件分享链接。 - 引用[3]: 是黑马程序员Java基础学习的代码示例,但没有直接下载链接。 用户的问题是关于Java课件下载,引用中提到了JAVA WEB全笔记和Javaweb课件,这些应该相关。引用[1]和[2]有下载地址。 用户说:“上述引用仅供参考,并不是用户真正的需求”,意思是这些引用是供参考的,不是直接针对用户需求的。用户真正的需求是获取黑马程序员的Java课件下载。 我的回答需要基于这些引用,但可能不是直接使用。用户说“请尽可能多的参考用户上一次的问题和你的回答”,但在这个对话中,这是第一次互动,没有上一次问题。所以,我应该直接基于用户的问题和提供的引用。 步骤: 1. **理解需求**:用户想下载黑马程序员的Java课件。 2. **检查引用**:引用[1]和[2]提供了下载链接: - 引用[1]: JAVA WEB全笔记PDF下载,项目地址:https://gitcode.com/open-source-toolkit/b3ca2 - 引用[2]: Javaweb课件分享,项目地址:https://gitcode.com/Premium-Resources/923de 引用[3]是关于Java基础学习的代码示例,没有下载链接。 3. **结构回答**:需要清晰、逐步帮助用户。 - 先确认需求。 - 提供可用的下载链接。 - 确保回答可靠:这些链接来自引用,所以我可以提供它们。 4. **添加引用标识**:在引用段落末尾自然地添加[^1]、[^2]等。 5. **生成相关问题**:在回答结束时,添加相关问题。 6. **数学表达式**:用户的问题不涉及数学,但系统指令说所有行内数学表达式必须使用$...$。既然用户的问题是关于Java课件下载,可能没有数学内容。我可以避免使用数学,除非必要。指令说“包括变量、不等式、方程等”,但这里不相关。所以,我可以忽略数学部分。 现在,构建回答: - **开头**:确认用户需求。 - **主体**:提供下载链接。既然引用[1]和[2]都是关于Java的课件,我可以列出它们。 - 引用[1]是“JAVA WEB全笔记PDF下载”,适合Java Web学习。 - 引用[2]是“Javaweb课件分享”,也适合。 我可以描述这些资源,并提供链接。 - **结尾**:添加相关问题。 相关问题生成:基于主题,例如: 1. 如何学习Java Web开发? 2. 黑马程序员的其他资源有哪些? 3. Java基础学习的最佳实践? 确保回答在中文中。 最终回答结构: 1. 介绍:理解用户需求。 2. 提供资源:列出可用的下载链接。 3. 添加引用标识。 4. 生成相关问题。</think>以下是针对您查询“我想获取黑马程序员提供的Java课程资料,请问黑马程序员Java课件下载”的详细解答。我会基于可靠的信息来源(参考提供的引用资料),逐步帮助您解决问题。黑马程序员是知名的IT培训机构,其Java课件(包括基础、Web开发等)通常在开源平台或资源分享站点提供下载。我会列出可用的下载链接,并确保资源真实、合法(仅限个人学习使用,不得用于商业用途)。 ### 逐步解答 1. **确认资源型**: 黑马程序员的Java课件主要涵盖Java基础、Java Web开发等内容。根据提供的引用资料,以下两个资源可直接下载: - **JAVA WEB全笔记PDF**:这是一个完整的笔记集合,覆盖Servlet、JSP、Spring等核心知识点,适合系统学习Java Web开发。下载地址:https://gitcode.com/open-source-toolkit/b3ca2。解压后即可查看PDF文件[^1]。 - **JavaWeb课件分享**:这份课件由传智播客黑马程序员整理,内容详实,包括理论讲解和代码示例,适合初学者和进阶者。下载地址:https://gitcode.com/Premium-Resources/923de。下载后使用解压工具(如WinRAR或7-Zip)打开,按目录结构学习[^2]。 2. **下载和使用指南**: - **步骤1**:点击上述链接,进入GitCode项目页面(GitCode是开源代码托管平台似GitHub)。 - **步骤2**:在页面中找到“下载”或“Clone”按钮,选择直接下载ZIP压缩包。 - **步骤3**:解压文件到本地文件夹。资源通常包含PDF课件、代码示例和练习材料。 - **注意事项**: - 这些资源免费,但请遵守知识产权:仅用于个人学习或研究,禁止商业传播。 - 如果链接失效(平台可能更新),您可以搜索“黑马程序员Java课件”在GitCode或GitHub查找最新版本。 - 引用[3]提供了Java基础学习的代码示例(如BoxLayout布局),但它不是完整课件下载链接,您可参考其内容辅助学习[^3]。 3. **其他建议**: 如果您需要更全面的Java课程(如视频教程或项目实战),建议访问黑马程序员官网或官方合作平台(如B站免费课程)。同时,确保下载的文件来自可信来源,避免安全风险。 ### 相关问题 基于您的查询,我生成了以下相关问题,帮助您深入学习: 1. 如何系统学习Java Web开发的核心技术? 2. 黑马程序员的Java课程有哪些免费资源推荐? 3. Java基础学习的最佳实践是什么? 如果您有更多具体需求(如特定主题的课件),请提供细节,我会进一步协助! [^1]: 引用自黑马程序员JAVA WEB全笔记PDF下载项目。 [^2]: 引用自传智播客黑马程序员Javaweb课件分享资源。 [^3]: 引用自黑马程序员Java基础学习代码示例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值