static 关键字

概述

package com.itheima.staticdemo;/*** 被static修饰的成员变量称为静态变量,也叫类变量* 类变量属于类,只在内存中加载一次,被所有的对象共享* 可以使用类名直接调用,亦可使用对象调用但不推荐* 类方法的调用与类变量相同* 注意:同一个类中可以省略类名*/
public class Demo01Static {public static void main(String[] args) {User user = new User();//不应该通过类实例访问静态成员user.onlineNumber = 5;//通过类名访问,5System.out.println(User.onlineNumber);}
}

访问注意事项

package com.itheima.staticdemo;/*** 访问注意事项:* 1.静态方法只能访问静态成员变量* 2.实例方法可以访问静态成员变量和实例成员变量* 3.静态方法中不能出现this关键字*/
public class Demo02Static {private static String name;public static void print(){//System.out.println(this);this关键字属于对象,静态方法不一定使用对象调用}public static void main(String[] args) {print();}
}

静态方法、变量的定义

package com.itheima.staticdemo;/*** 类变量与类同时加载,类的字节码文件加载进方法区的同时* 类变量加载进堆内存的静态变量区* 若一个方法表示的是对象本身的行为或者需要访问实例成员,则需要申明为实例成员方法* 若实现的是一个共用功能,则可以申明为静态方法*/
public class User {private String name;private int age;public static int onlineNumber;public static void main(String[] args) {//类名调用User.onlineNumber = 10;//System.out.println(name);报错//本类中可省略类名,10System.out.println(onlineNumber);User u1 = new User();u1.age = 10;u1.name = "张三";//对象调用(不推荐)u1.onlineNumber++;System.out.println(u1.name);System.out.println(u1.age);//11System.out.println(onlineNumber);User u2 = new User();u2.name = "李四";u2.age = 30;u2.onlineNumber++;System.out.println(u2.name);System.out.println(u2.age);//12System.out.println(onlineNumber);}
}

工具类

1.itheima工具类

package com.itheima.staticdemoutil;import java.util.Random;/*** 工具类,里面定义了很多类方法,方便调用,提高代码复用性* 因为不需要创建对象调用,所以应将构造器私有化,专业!*/
public class ItheimaUtil {//构造器私有化private ItheimaUtil() {}/*** 生成验证码* @param n 验证码位数* @return 返回生成的验证码*/public static String createVerifyCode(int n){String code = "";String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";Random random = new Random();for (int i = 0; i < n; i++) {int index = random.nextInt(s.length());code += s.charAt(index);}return code;}
}

测试itheima工具类

package com.itheima.staticdemoutil;/*** 测试ItheimaUtil工具类*/
public class TestIthaimaUtil {public static void main(String[] args) {//生成一个4位验证码System.out.println(ItheimaUtil.createVerifyCode(4));//构造器私有化后无法创建该类对象//ItheimaUtil itheimaUtil = new ItheimaUtil();}
}

2.Arrays工具类

package com.itheima.staticdemoutil;/*** 训练:* 数组工具类* 1.toString(),返回整数数组内容,返回字符串格式为[1,3,4,5]* 2.getAvg(),去掉最高分、最低分,计算返回平均值*/
public class ArraysUtils {private ArraysUtils(){}/*** 返回整数数组内容,返回字符串格式为[1,3,4,5]* @param arr 传入的整数数组* @return 返回生成的字符串*/public static String toString(int[] arr){if (arr == null){return null;}String s = "[";for (int i = 0; i < arr.length; i++) {String ss = "";if (i == arr.length-1){ss = arr[i] + "]";}else {ss = arr[i] + ",";}s += ss;}return s;}/*** 去掉最高分、最低分,计算返回平均值* @param arr 传入的整数数组* @return 返回平均值*/public static double getAvg(int[] arr){if (arr == null){return -1;}double avg = 0;int max = arr[0],min = arr[0],sum = 0;for (int i = 0; i < arr.length; i++) {if (arr[i]>max){max = arr[i];}if (arr[i]<min){min = arr[i];}sum += arr[i];}avg = (sum-max-min)/(arr.length-2);return avg;}
}

测试Arrays工具类

package com.itheima.staticdemoutil;/*** 测试ArraysUtils工具类*/
public class TestArraysUtils {public static void main(String[] args) {int[] arr = {1,3,2,5};System.out.println(ArraysUtils.toString(arr));System.out.println(ArraysUtils.getAvg(arr));}
}

代码块

package com.itheima.staticdemocodeblock;import java.util.ArrayList;/*** 静态代码块:static{},使用static修饰,与类同时加载一次,* 自动触发,在main方法之前,用于初始化静态资源* 实例代码块:{},每次创建对象都执行一次,在构造器之前* 用于初始化实例资源*/
public class Demo01CodeBlock {private static String name;private int age;public static ArrayList<String> list = new ArrayList<>();public Demo01CodeBlock() {System.out.println("构造器执行了");}public static void main(String[] args) {System.out.println("main方法执行了");System.out.println(name);System.out.println(list);Demo01CodeBlock d1 = new Demo01CodeBlock();}static {//初始化静态成员变量System.out.println("静态代码块触发了");name = "张三";list.add("a");}{System.out.println("实例代码块触发了");//初始化实例成员变量,可以,但很少这么做age = 10;}
}

代码块案例:

package com.itheima.staticdemocodeblock;import java.util.ArrayList;/*** 案例:使用静态代码块生成一副牌*/
public class Case01 {public static ArrayList<String> list = new ArrayList<>();static {String[] arr1 = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};String[] arr2 = {"♠","♥","♣","♦"};for (int i = 0; i < arr1.length; i++) {for (int i1 = 0; i1 < arr2.length; i1++) {String s = arr2[i1] + arr1[i];list.add(s);}}list.add("小												

day18-java相关推荐

  1. day18 java的数组

    1.数组的内存图结构 2.初始化一维数组 2.1静态和动态初始化 2.2方法参数是一个数组 2.3main方法的数组 2.4一维数组存储引用数据类型 3.数组的拷贝 3.1数组的拷贝arraycopy ...

  2. Java基础day18

    Java基础day18 Java基础day18-字节缓冲流&字符流 1.字节缓冲流 1.1字节缓冲流构造方法 1.2字节流复制视频 2.字符流 2.1为什么会出现字符流 2.2编码表 2.3字 ...

  3. 传z播客 刘意_2015年Java基础视频笔记(day18~day20(2016年3月20日14:36:05)

    day18 1.Map引入 Map是区分于Collection的另外一个"老大" 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取 ...

  4. 传z播客 刘意_2015年Java基础视频笔记(day18~day20)(2016年3月20日14:33:31)

    day18 1.Map引入 Map是区分于Collection的另外一个"老大" 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取 ...

  5. 01.08学习Java的day18【泛型与集合】

    day18[泛型] 主要内容 泛型 Collection集合 学习目标 能够使用泛型定义类.接口.方法 能够理解泛型上限 能够阐述泛型通配符的作用 能够识别通配符的上下限 能够熟练使用Collecti ...

  6. JAVA day18,19 单列集合Collection:List(ArrayList,LinkedList,Vector)、Queue(Deque)、Set(HashSet,TreeSet),比较器

    Collection单列集合 所有超级接口: Iterable<E> 所有已知子接口: BeanContext, BeanContextServices, BlockingDeque< ...

  7. java day18【线程池、Lambda表达式】

    第一章 等待唤醒机制 1.1 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B ...

  8. 自学Java day18 jvav反射专题 从jvav到架构师

    反射是jvav被视为动态语言的关键,可以让程序创建和控制任何类的对象,无需提前硬编码目标类,极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力.反射机制是构建框架技术的基础所在,使 ...

  9. java基础复习——day18(Stream流 ; 反射)

    Stream流 1. 生成方式 Stream流 函数式编程 牛逼666 用到Lambda表达式 Stream流操作: stream流的使用 生成流 通过数据源(集合,数组等) 生成流list.stre ...

  10. Java基础 DAY18

    1 枚举 1.1 枚举的引出 要求创建季节(Season) 对象,请设计并完成. ①按照普通设计类的思路来写: package enum_;public class Enumeration01 {pu ...

最新文章

  1. 将文件名和文件修改时间批量输出至Excel中
  2. case when then else end
  3. k8s 通过环境变量获取Pod信息
  4. EOS账户系统(1)场景
  5. Linux卸载搜狐,双系统删除教程详解:Windows(linux)双系统,教你如何删除其中一个!...
  6. void什么意思python_python 为什么没有 void 关键字?
  7. C语言程序顺序结构1交换变量,如何将c语言中结构体内的所有类型变量的值输出来...
  8. Tomcat 改BUG之 localhost:8080 404
  9. 属性数量限制android,骑马与砍杀2军队数量上限属性加成MOD
  10. hibernate注释映射_Hibernate一对多映射示例注释
  11. python脚本:检测字符串标识符
  12. 【TSP】基于matlab GUI模拟退火+蚁群+遗传算法求解旅行商问题【含Matlab源码 1611期】
  13. 我选择 wxWidgets 而不是 Qt 作为图形用户界面框架的一些想法
  14. MacOS Ventura 13.0 Beta1 (22A5266r) 带 OC 0.8.1 / Cl 5146 / PE 三分区原版黑苹果镜像
  15. 承包一座山能做什么_您为什么没有得到最好的承包商,又能做些什么(第2部分)...
  16. 测试总结:如何进行弱网测试
  17. Portal技术白皮书
  18. 使用先电IaaS云平台创建云主机
  19. 人工智能是研究开发能够模拟、延伸和扩展人类智能的技术
  20. mysql1214_mysql – #1214 – 使用的表类型不支持FULLTEXT索引

热门文章

  1. 弘辽科技:打造爆款的三大核心。
  2. Texpad for mac(专业的LaTeX编辑工具)
  3. asp.net (C#) RTX(腾讯通) 接口应用 能实现与OA接口
  4. 解决Android虚拟机启动时System UI isn‘t responding错误
  5. 什么叫VI、及VI的设计规范
  6. 利用VC++与MSXML解析XML文档
  7. 学生表/教师表/课程表/成绩表常见SQL查询
  8. Topology拓扑_5:拓扑编辑器
  9. pear在php中的用法,php使用pear_smtp发送邮件
  10. 校内网API的.net版本XiaoNei.Net 1.0(非官方)