day23_关键字static丶代码块丶native关键字
创始人
2024-06-01 06:51:53
0

static关键字

static是静态的意思,可以用来修饰成员变量、成员方法:

修饰成员变量

我们称为类变量,或静态变量,(类变量:属于类、加载一次,内存中只有一份)可以被类的所有对象共享(访问、修改)。

public class Test {//类变量public static String nationality = "中国";public static void main(String[] args) {//推荐使用类名访问System.out.println("Test.nationality = " + Test.nationality); //Test.nationality = 中国}
}

访问格式 

实例成员变量(无static修饰的成员变量,属于对象),只能通过对象访问。访问格式:对象.实例成员变量

两种成员变量各自在什么情况下定义?

  • 静态成员变量:表示在线人数等需要被类的所有对象共享的信息时。
  • 实例成员变量:属于每个对象,且每个对象的该信息不同时(如:name,age,money…)

修饰成员方法

 修饰方法之后称为静态方法(类方法)。静态成员方法(有static修饰的方法,归属于类),建议用类名访问,也可以用对象访问。

public class Demo {public static void main(String[] args) {//建议用类名访问,也可以用对象访问。Demo.showInfo(); //静态方法}public static void showInfo(){System.out.println("静态方法");}
}

类方法访问格式:

实例成员方法(无static修饰,属于对象)的访问格式: 对象.实例成员方法

每种成员方法的使用场景是怎么样的?

  • 表示对象自己的行为的,且方法中需要直接访问实例成员,则该方法必须申明成实例方法。
  •  如果该方法是以执行一个通用功能为目的,或者需要方便访问,则可以申明成静态方法

注意事项:

  • 静态方法只能访问静态的成员,不可以直接访问实例成员
  • 实例方法可以访问静态的成员,也可以访问实例成员。
  • 静态方法中是不可以出现this关键字的。
  • 父类的静态方法可以被继承不能被重写
  • 父接口的静态方法不能被实现类继承

static应用之一:工具类

工具类是什么?

  • 类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的。使用工具类的好处:调用方便丶代码复用

为什么工具类中的方法不用实例方法做?

  • 实例方法需要创建对象调用丶每次调用都要创建对象会浪费内存

注意事项:

由于工具里面都是静态方法,直接用类名即可访问,因此,工具类无需创建对象,建议将工具类的构造器进行私有。

代码示例

/*
需求:请在ArraysUtils中提供一个工具类方法toString,用于返回整数数组的内容,返回的字符串格式如:[10, 20, 50, 34, 100](只考虑整数数组,且只考虑一维数组)*/
public class MyUtil {/*** 注意:由于工具类无需创建对象,所以把其构造器私有化会显得很专业!*/private MyUtil() {}public static String toString(int[] arr) {/**一些判断,提高健壮性*/if (arr == null) {return null;}/** 实现功能*/String result = "[";for (int i = 0; i < arr.length; i++) {result += arr.length - 1 == i ? arr[i] : arr[i] + ", ";}result += "]";return result;}
}

定义测试类

public class Test {public static void main(String[] args) {int[] arr= {1,2,3,4};//正常数组System.out.println( MyUtil.toString(arr)); //[1, 2, 3, 4]//数组内存地址为nullarr=null;System.out.println( MyUtil.toString(arr));//null//数组中没有元素存在arr=new int[0];System.out.println(MyUtil.toString(arr));//[]}
}

static应用之一:单例设计模式

使用饿汉单例实现单例类

/**使用饿汉单例实现单例类*/
public class SingleInstance {/**2、饿汉单例是在获取对象前,对象已经提前准备好了一个。这个对象只能是一个,所以定义静态成员变量记住。*/public static SingleInstance instance = new SingleInstance();/**1、必须把构造器私有化。*/private SingleInstance(){}
}

懒汉单例 

/**懒汉单例*/
public class SingleInstance2 {/**2、定义一个静态的成员变量负责存储一个对象。只加载一次,只有一份。注意:最好私有化,这样可以避免给别人挖坑!*/private static SingleInstance2 instance;/**3、提供一个方法,对外返回单例对象。*/public static SingleInstance2 getInstance() {if(instance == null){// 第一次来拿对象 :此时需要创建对象。instance = new SingleInstance2();}return instance;}/**1、私有化构造器*/private SingleInstance2(){}
}

代码块

概述:代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外。 在Java类下,使用 { } 括起来的代码被称为代码块 。

代码块分类

静态代码块:

格式:

  • 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次
  • 使用场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用。

代码示例

/*
静态代码块:用于给静态变量进行赋值静态代码块只会创建一次 再次创建n个对象 也不会再执行先于构造器执行执行顺序 按照从上到下执行*/
import java.util.ArrayList;
//需求:在启动游戏房间的时候,应该提前准备好54张牌,后续才可以直接使用这些牌数据。
public class Test {//定义一个静态的ArrayList集合存储54张牌对象,静态的集合只会加载一份。public static ArrayList arrayList;static {arrayList = new ArrayList<>();// a、定义一个数组存储全部点数:类型确定了,个数确定了。String[] sizes = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};// b、定义一个数组存储全部的花色:类型确定了,个数确定了。String[] colors = {"♥", "♠", "♦", "♣"};for (int i = 0; i < sizes.length; i++) {for (int j = 0; j < colors.length; j++) {String s = sizes[i] + colors[j];arrayList.add(s);}}arrayList.add("大王");arrayList.add("小王");}public static void main(String[] args) {System.out.println(arrayList);}
}

构造代码块

  • 格式:

  • 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
  • 使用场景:初始化实例资源。
    private String name;/**实例代码块:无static修饰,属于对象,每次构建对象时,都会触发一次执行。初始化实例资源。*/{name = "张三";}

native关键字

  • 作用:只能修饰方法,表示这个方法的方法体代码不是用Java语言实现的,而是由C/C++语言编写的。但是对于Java程序员来说,可以当做Java的方法一样去正常调用它,或者子类重写它。

JVM内存的管理:

详解:

相关内容

热门资讯

王者定位怎么关安卓系统,轻松实... 你是不是也和我一样,对王者荣耀这款游戏爱得深沉呢?不过,有时候游戏里的设置让人头疼,比如安卓系统的王...
树莓派安卓系统流畅,打造便携式... 亲爱的读者们,你是否曾想过,将树莓派与安卓系统结合,会擦出怎样的火花呢?今天,就让我带你一起探索这个...
安卓系统智能机顶盒,引领家庭娱... 你有没有想过,家里的电视也能变得智能起来?没错,就是那个陪伴我们多年的老电视,现在也能摇身一变,成为...
安卓系统很差了吗现在,性能优劣... 最近是不是有不少朋友在讨论安卓系统的问题呢?有人说它越来越差了,也有人觉得它还是那个熟悉的“老朋友”...
安卓系统uc安装包,Andro... 你有没有发现,手机里的安卓系统越来越强大了?今天,咱们就来聊聊这个话题——安卓系统中的UC安装包。你...
安卓系统谷歌能删吗,谷歌能否删... 你有没有想过,那个一直陪伴你手机生活的安卓系统,它背后的谷歌爸爸,是不是也能被你随意删掉呢?这可不是...
安卓系统会不会更耗电,解析其功... 你有没有发现,手机用着用着,电池就有点不给力了?尤其是那些用安卓系统的手机,有时候感觉电就像流水一样...
安卓系统中无效目录,安卓系统无... 你有没有遇到过在安卓系统中,明明文件夹就在那里,但是就是找不到的情况?别急,今天就来给你揭秘安卓系统...
国产安卓机哪个系统好用,探寻最... 你有没有想过,国产安卓机哪个系统最好用呢?这可是个让人纠结的问题,毕竟每个系统都有它的特色和亮点。今...
安卓系统cpua9,引领性能与... 你有没有发现,最近你的安卓手机运行得是不是比以前顺畅多了?这可多亏了那个强大的安卓系统CPUA9啊!...
安卓系统usb驱动程序,功能、... 你有没有遇到过这种情况:手机里存了那么多宝贝照片和视频,想传输到电脑上保存,结果电脑却像个小顽皮,死...
安卓操作系统怎么关闭,轻松关闭... 手机里的安卓操作系统是不是有时候让你觉得有点儿烦呢?别急,今天就来手把手教你如何轻松关闭安卓操作系统...
追星手机壳推荐安卓系统,盘点热... 你有没有发现,现在追星族们对手机壳的热爱简直到了疯狂的地步?没错,就是那种能让你一秒变身偶像迷妹的手...
ios系统用安卓系统游戏下载软... 你有没有想过,明明是iOS系统的手机,却想玩安卓系统的游戏?这可不是什么天方夜谭,现在就有这么神奇的...
安卓高系统怎么用美化,打造专属... 亲爱的安卓用户们,你是不是也和我一样,对手机系统美化情有独钟呢?想要让你的安卓手机焕然一新,变得个性...
安卓系统怎么开夜间模式,安卓系... 亲爱的手机控们,你是不是在夜晚使用安卓手机时,眼睛感到有些不适?别担心,今天我要给你揭秘一个超级实用...
王者安卓系统用苹果人脸,一场视... 你知道吗?最近在手机圈里可是掀起了一股不小的波澜呢!那就是王者安卓系统竟然用上了苹果人脸识别技术!是...
安卓444怎么升级系统,轻松迈... 你那安卓444的小家伙是不是已经有点儿落伍了?别急,今天就来给你详细说说怎么给它来个系统升级,让它焕...
安卓系统raw修图软件,探索安... 你有没有发现,手机拍照越来越方便了,但有时候拍出来的照片还是不够完美呢?别急,今天就来给你安利几款安...
安卓系统的王者切换苹果,从安卓... 你知道吗?最近身边的朋友圈里掀起了一股热潮,那就是安卓系统的王者们纷纷切换到苹果阵营。这可真是让人大...