IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java静态的浅谈 -> 正文阅读

[Java知识库]Java静态的浅谈

思考一个问题:我们是如何调用Math类的方法?
是下面第一个方法还是第二个方法?

 int x=Math.round(42.2)
Math math=new Math();
math.round(42.2)

但是第一个,为什么是第一个而不是第二个了?明明Math是个类啊,就该实例。然而我们查看源码可以发现实际上是Math的构造函数时私有的!这就代表你无法创建Math的对像.实际上像round()、abs()、max()等数学运算方法都不需要实例变量值,事实上也无法创建。为什么Math这个类中的所有方法都不需要实例变量值。因为这些方法都是静态的,所以你无须Math的实例,你会用到的只有它本身。
static这个关键字可以用来标记出不需要类实例的方法,一个静态的方法代表说"一种不依靠实例变量也就不需要对象的行为"
静态方法不能调用非静态的变量

public class test1 {
    private int size;

    public static void main(String[] args) {
        System.out.println(size);
    }
    public void setSize(int s){
        size=s;
    }
    public int getSize(){
        return size;
    }
}

在这里插入图片描述
另外之前还学过abstract修饰的抽象类,抽象类是不能被初始化的。但是我们也可以用私有化的构造函数来限制非抽象类被初始化,被标记为private的方法代表只能被同一类的程序所调用
静态方法也不能调用非静态的方法
最明显的例子就是main函数就是静态方法public static void main(String[] args)里面有static关键字,如果在mian函数里直接调用另一个函数,能成功吗?

public class test1 {
    public static void main(String[] args) {
        System.out.println("1+2="+sum(1,2));
    }

    public int sum(int a,int b) {
    return a+b;
    }
}


在这里插入图片描述
解决方法有两种
1.将sum()改为静态方法

public class test1 {
    public static void main(String[] args) {
        System.out.println("1+2="+sum(1,2));
    }

    public static int sum(int a,int b) {
    return a+b;
    }
}

2.创建对象调用

public class test1 {
    public static void main(String[] args) {
        test1 test=new test1();
        System.out.println(test.sum(1,2));
    }

    public  int sum(int a,int b) {
    return a+b;
    }
}

如果从静态方法调用非静态方法,但此非静态方法没有用到实例变量,这样会通过编译吗?
答案是:不能,编译器可以知道你有没有使用实例变量。如果现在可以通过,后来却把非静态变量改为实例变量了?又如果子类去覆盖这个方法成有用到实例变量的版本了?
静态变量:他的值对所有的实例来说都相同(相当于全局变量)
所以:1、静态变量是共享的
2、同一类所有的实例共享一份静态变量
3、实例变量:每个实例一个
静态变量:每个类一个
4、静态项目的初始化有两个特征
1》静态变量会在该类的任何对象创建之前就完成初始化
2》静态变量会在该类的任何静态方法创建之前就完成初始化
如果我们没有给静态变量赋值,则会设定使用默认值

问:静态的方法不能存取非静态的变量,但非静态的方法可以读取静态的变量吗?
答案:可以,非静态方法不可以调用该类的静态方法或静态的变量
静态的final变量就是常数
例如看Math源码中的PI定义

public static final double PI=3.141592653589793;

此处标记为public,因此可以提供各方读取
此处标为static,所以不需要Math的实例
此处标记为final,所以PI不变
常变量的名称必须用大写字母表示
final的静态变量值必须在声明或静态初始化程序中赋值

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:17:51  更:2022-03-10 22:18:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:43:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码