关于类方法里不能调用实例方法/成员变量(即静态方法里不能调用非静态方法和成员变量)的论述

关于类方法里不能调用实例方法/成员变量的论述

参考《疯狂Java讲义》
作者看《疯狂Java讲义》时写下此文,许多文字都是书中原话

  1. 首先要明白无论调用成员变量还是方法,都需要主调(主语调用者),其格式为:主调.方法/成员变量
  2. 别看我们平时可以直接使用方法名/变量名,其实它们都有默认的前缀(this或对象名)。如果方法名/变量名是static修饰的,默认前缀为类名;没有static修饰的,默认前缀为this。
  3. 关于this,记住一句话:谁调用这个方法,this就代表谁
  4. 接下来进入正题。类方法/类变量属于类本身而不是类的对象,在类方法里面调用实例方法/变量,那么this就代表这个类本身(这就产生矛盾了:从类中去调用对象中的方法/变量),当然就找不到所想调用的实例方法或变量了,因为它们在对象中------即类方法中不能直接调用实例方法/变量(需要创建对象,用对象名作为主调)。
  5. 如果你想在类方法里面调用实例方法/变量的话,有一种方法是先创建一个对象,将对象名作为主调:
public class StaticAccessNonStatic
{
	public void info()
	{
		System.out.println("简单的info方法");
	}
	public static void main(String[] args)
	{
		StaticAccessNonStatic vair=new StaticAccessNonStatic();
		vair.info();
	}
}

错误的调用方式:

public class StaticAccessNonStatic
{
	public void info()
	{
		System.out.println("简单的info方法");
	}
	public static void main(String[] args)
	{
		info();
	}
}

扩展阅读:关于java类方法中不能访问实例变量,但实例方法可以访问类变量的一种解释

<think>好的,我现在需要帮助用户了解Java中Math类的random方法的使用。首先,我需要回忆一下Math.random()的基本知识。记得这个方法是一个静态方法,所以不需要创建Math类的实例,可以直接用Math.random()调用。它会返回一个介于0.0(包含)到1.0(不包含)之间的伪随机double值。 接下来,我应该整理出使用的基本步骤。比如,用户可能想知道如何生成特定范围内的随机数,比如整数或者指定区间的数。例如,生成0到100之间的整数,可能需要将Math.random()的结果乘以100,然后取整。但要注意,直接强制转换会得到0到99,所以如果包括100的话,可能需要调整。 然后,我需要参考用户提供的引用内容。引用1、3、5提到了生成不同范围的随机数,比如[0,100]、[30,60]以及偶数。特别是引用5中的案例展示了如何生成2到22之间的偶数,这可能有帮助。应该将这些例子整合到教程中,给出具体的代码示例。 另外,用户可能对Math.random()Random类之间的区别感兴趣,但根据问题,用户只问到了Math类的方法,所以可能需要简要提及两者的区别,但重点放在Math.random()上。引用24提到了Random类的使用,但这可能不需要深入,除用户问到。 然后,按照用户的要求,教程需要结构清晰,分步骤说明。可能需要分为几个部分:方法简介、基本使用、生成指定范围随机数(包括整数浮点数)、注意事项以及Random类的对比。 需要注意语法正确,比如在代码示例中使用正确的Java语法,比如强制类型转换(int),以及正确的范围计算方法。例如,生成[a,b)之间的数,公式是Math.random()*(b-a) + a。而如果是整数,可能需要使用(int)进行转换,并且处理边界情况。 还要注意用户提到的LaTeX格式,行内公式用$...$,比如计算范围时的公式,可能需要写成$[a, b)$的范围公式是:$\text{Math.random()} \times (b-a) + a$。这样符合用户的格式要求。 另外,用户要求生成相关问题,这部分需要放在最后,可能包括如何生成不同数据类型的随机数、种子问题、性能比较等。 现在需要检查是否有遗漏的部分,比如错误处理,但Math.random()本身没有异常抛出,所以可能不需要。另外,是否提到线程安全性?Math.random()内部使用AtomicLong,所以是线程安全的,但可能对用户来说不是重点,可以简要提及。 最后,确保引用的正确使用。用户提供的引用1、3、5中有具体的示例代码,需要在相关部分添加引用标识,比如在讲解生成区间随机数时引用案例中的内容。 总结一下,教程的结构可能如下: 1. 方法简介:静态方法,返回0.0到1.0的double。 2. 基本使用:直接调用Math.random()。 3. 生成指定范围的随机数: a. 浮点数:例如[1.0, 5.0)。 b. 整数:例如[0, 100]的整数,包括0到99,或者包括100的话需要调整。 c. 特定区间如[30,60]。 d. 生成偶数或其他特定条件的数。 4. 注意事项:伪随机性,种子问题,线程安全。 5. 与Random类的对比:简要说明区别。 6. 代码示例:引用中的例子,比如生成偶数的方法。 7. 相关问题:生成其他类型、优化、应用场景等。 现在需要将这些内容用中文清晰表达,并确保代码正确,引用正确标注。</think>### Java中Math类random方法使用教程 #### 1. 方法简介 `Math.random()` 是Java提供的静态方法,无需创建对象即可调用。该方法返回一个 **伪随机数**,范围是 $[0.0, 1.0)$(包含0.0,不包含1.0)[^1]。 #### 2. 基本用法 直接调用方法获取随机数: ```java double randomValue = Math.random(); System.out.println(randomValue); // 输出类似 0.123456 ``` #### 3. 生成指定范围的随机数 ##### 3.1 生成浮点数 - **公式**:$\text{目标值} = \text{Math.random()} \times (\text{上限} - \text{下限}) + \text{下限}$ - **示例**:生成 $[5.0, 10.0)$ 的随机数: ```java double num = Math.random() * 5 + 5; ``` ##### 3.2 生成整数 - **公式**:$\text{整数} = (\text{int})(\text{Math.random()} \times (\text{上限} - \text{下限})) + \text{下限}$ - **示例**:生成 $[0, 100]$ 的整数(包含0100): ```java int num = (int)(Math.random() * 101); // 101是因为Math.random()可能接近1.0 ``` ##### 3.3 生成特定区间的整数 - **示例1**:生成 $[30, 60]$ 的整数: ```java int num = 30 + (int)(Math.random() * 31); // 31是因为60-30+1=31 ``` - **示例2**:生成 $[2, 22]$ 的偶数(引用案例): ```java public static int getEvenNum(int min, int max) { int num = min + (int)(Math.random() * (max - min)); return (num % 2 == 0) ? num : num + 1; } // 调用:getEvenNum(2, 22); [^5] ``` #### 4. 注意事项 - **伪随机性**:生成的随机数是基于算法计算的,真正随机。 - **种子不可控**:`Math.random()` 内部使用系统时间作为种子,无法手动设置。 - **线程安全**:内部实现使用原子变量,适合多线程环境[^1]。 #### 5. 与Random类的区别 - **Math.random()**:简单易用,适合基础需求。 - **Random类**:支持更多数据类型(如`nextInt()`、`nextDouble()`),可设置种子,灵活性更高[^2]。 --- ### 代码示例 生成 $[0, 30]$ 的随机整数: ```java int randomInt = (int)(Math.random() * 31); // 包含0到30 ``` 生成 $[30, 60]$ 的随机整数: ```java int randomInt = 30 + (int)(Math.random() * 31); // 30 ≤ num ≤ 60 [^3] ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值