面向对象——static(静态)Math类自定义工具类代码块

news2024/12/25 14:29:21

目录

static(静态)关键字

static的注意事项

static的优点和缺点

应用场景

 自定义工具类

代码块

static(静态)关键字

  • static是一个修饰符,用于修饰成员(成员变量 、成员方法
  • static的特点

        –随着类的加载而加载

        –优先于对象存在

        –被类的所有对象共享

        –可以被类名调用

案例:

package com.demo01;
/*
 * static:是一个关键字,用于修饰成员变量和成员方法
 * static的特点:
 * 			被所有的对象所共享
 * 			可以使用类名调用
 * 			静态的加载优先于对象
 * 			随着类的加载而加载
 * 
 */
public class StaticDemo {
	public static void main(String[] args) {
		Person.graduateFrom = "湖南大学";
		
		Person p = new Person();
		p.name = "段誉";
		p.age = 18;
		//p.graduateFrom = "湖南大学";
		p.speak();
		
		Person p2 = new Person();
		p2.name = "萧峰";
		p2.age = 20;
		//p2.graduateFrom = "湖南大学";
		p2.speak();
		Person.think();
	}
}

class Person {
	String name;
	int age;
	static String graduateFrom;//毕业院校
	
	public void speak() {
		System.out.println(name + "---" + graduateFrom);
	}
	
	public static void think() {
		System.out.println("思考");
	}
}

分析:先Person.graduateFrom = "湖南大学";才创建一个类对象,静态得成员变量应该用一种静态得方法来访问,用Person 来访问,不应该用p.得方式来访问。

static的注意事项

静态方法:

* 1、可以调用静态的成员变量

* 2、可以调用静态的成员方法

* 3、不可以调用非静态成员变量

* 4、不可以调用非静态成员方法

* 静态方法只能调用静态的成员

非静态方法:

* 1、可以调用静态的成员变量

* 2、可以调用静态的成员方法

* 3、可以调用非静态的成员变量

* 4、可以调用非静态的成员方法

* 静态的方法中是否this这个对象?没有的

分析:静态方法是属于类的,而非静态的成员,不管是成员变量,还是成员方法,他是属于对象的,静态方法在调用类的时候已经初始化好了,静态如果可以调用非静态成员时,会发现他是不属于类的,是属于对象的,现在还没有对象呢,那怎么办呢?所以相互矛盾,所以静态是无法调用非静态的,反过来,非静态是可以调用静态成员变量。我们在待用静态时,是已经声明了对象,才调用的。

package com.demo01;
/*
 * static的注意事项:
 * 			静态方法:
 * 				1、可以调用静态的成员变量
 * 				2、可以调用静态的成员方法
 * 				3、不可以调用非静态成员变量
 * 				4、不可以调用非静态成员方法
 * 				静态方法只能调用静态的成员
 * 			非静态方法:
 * 				1、可以调用静态的成员变量
 * 				2、可以调用静态的成员方法
 * 				3、可以调用非静态的成员变量
 * 				4、可以调用非静态的成员方法
 * 		
 * 	静态的方法中是否this这个对象?没有的
 * 				
 * 
 */
public class StaticDemo2 {
	public static void main(String[] args) {
		Student.graduateFrom = "湖南大学";//1、可以调用静态的成员变量
		//Student.study();
		Student s = new Student();
		s.eat();
	}
}


class Student {
	String name;
	int age;
	
	//
	static String graduateFrom;//毕业院校
	
	public static void study() {
		//System.out.println(graduateFrom);
		sleep();//可以调用静态的成员方法
		
		//System.out.println(name);//不可以调用非静态成员变量
		
		//eat();//不可以调用非静态成员变量,这样是错误得
		
	}
	
	public static void sleep() {
		System.out.println("sleep");
		
	}
	
	public void eat() {
		System.out.println("eat");
		
		System.out.println(graduateFrom);
		sleep();
		
		
	}
	
}

static的优点和缺点

  • static优点

        –对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一

        –可以直接被类名调用,不用在堆内存创建对象

  • static的弊端

        –访问出现局限性。(静态虽好,但只能访问静态

应用场景

  • Math 类包含用于执行基本数学运算的方法。数学操作常用的类。
  • Math类的使用

        –没有构造方法,我们如何使用呢

  • Math类要掌握的功能

        –字段:PI

        –方法:absmaxmin powceilfloorround,random

package com.demo02;

public class MathDemo {
	public static void main(String[] args) {
		//Math:包含了一些基本的数学运算方法
		//static double PI  
		System.out.println(Math.PI);
		//
		//static double abs(double a)  :返回绝对值
		System.out.println(Math.abs(15.67));
		System.out.println(Math.abs(-0.10));
		
		//static double ceil(double a) 天花板   向上取整
		System.out.println(Math.ceil(-2.1));
		System.out.println(Math.ceil(1.6));
		//static double floor(double a)  地板  向下取整
		System.out.println(Math.floor(1.2));
		System.out.println(Math.floor(-1.6));
		
		//static long round(double a)  :四舍五入
		System.out.println(Math.round(-1.2));
		System.out.println(Math.round(1.6));
		
		//static double max(double a, double b) 
		System.out.println(Math.max(3, 4));
		
		//static double pow(double a, double b) :返回第一个参数的第二个参数次幂
		System.out.println(Math.pow(3, 4));
		
		//static double random() :返回一个随机数,大于零且小于一
		System.out.println(Math.random());
		
		
		 
	}
}

 自定义工具类

案例:

package com.demo03;

/**
 * 数组工具类
 * @author (无限嚣张(菜菜))
 *
 */
public class MyArrays {
	private MyArrays() {} 
	
	/*
	 * 返回数组中最大的元素
	 * 
	 */
	public static int getMax(int[] arr) {
		if(arr==null||arr.length==0) {
			return 0;
		}
		int max = arr[0];//参照物
		//遍历数组
		for(int x = 1;x < arr.length;x++) {
			if(arr[x] > max) {
				max = arr[x];//替换参照物
			}
		}
		
		return max;
	}
	
	
	/*
	 * 返回数组中指定参数的索引
	 * 
	 */
	
	public static int getIndex(int[] arr,int a) {
		//遍历数组
		for(int x = 0;x < arr.length;x++) {
			if(arr[x] == a) {
				return x;
			}
		}
		
		return -1;//如果查不到指定的参数,则返回-1
	}
}
package com.demo03;

public class MyArraysDemo {
	public static void main(String[] args) {
		//MyArrays m = new MyArrays();
		int[] arr = {3,5,8,10,1};
		int max = MyArrays.getMax(arr);
		System.out.println(max);
		
		int index = MyArrays.getIndex(arr, 8);
		System.out.println(index);
		
		
	}
}

代码块

  • 在Java中,使用{}括起来的代码被称为代码
  • 代码块分类

        –局部代码块——存在于方法中,控制变量的生命周期(作用域),用完销毁

        –构造代码块——提取构造方法中的共性,每次创建对象都会执行,并且在构造方法执行之前执行

        –静态代码块——随着类的加载而加载,只加载一次,加载类时需要做的一些初始化,比如加载驱动

        –同步代码块(多线程)

package com.demo04;

public class BlockDemo {
	public static void main(String[] args) {
		
		//局部代码块:存在于方法中,控制变量的生命周期(作用域),用完销毁
		{
			for(int x = 0;x < 10;x++) {
				System.out.println("我爱Java");
			}
			int num = 10;
		}
		//System.out.println(num);
		
		Teacher t = new Teacher();
		Teacher t2 = new Teacher("王老师",18);
	}
}

class Teacher {
	String name;
	int age;
	
	//构造代码块:提取构造方法中的共性,每次创建对象都会执行,并且在构造方法执行之前执行
	{
		for(int x = 0;x < 10;x++) {
			System.out.println("我爱Java");
		}
		System.out.println("我爱Java");
	}
	
	//静态代码块:随着类的加载而加载,只加载一次,加载类时需要做的一些初始化,比如加载驱动
	static {
		System.out.println("我爱Java");
	}
	
	public Teacher() {
		System.out.println("我是无参空构造");
	}
	
	public Teacher(String name,int age) {
		System.out.println("我是有参构造");
		
		this.name = name;
		this.age = age;
	}
	
	
}

分析:我们首先new一个无参的对象,进去以后执行局部代码块,输出10词我爱Java,num=10,运行完以后num就被删除了,我们new 一个teacher对象,首先执行的静态代码块,执行完以后,就执行构造代码块,执行完构造代码块才执行构造方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis处理client连接数过多,大量空闲链接无法释放问题

打开redis命令终端&#xff0c;输入&#xff1a; client list 查看连接数&#xff0c;用于返回所有连接到服务器的客户端信息和统计数据 参数解析&#xff1a; id: 唯一的64位的客户端ID(Redis 2.8.12加入)。 addr: 客户端的地址和端口 fd: 套接字所使用的文件描述符 age…

python真的很骚可惜你不会

python基本语法 &#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f4c6;51CTO首发时间&#xff1a;&#x1f334;2023年1月日3…

redis分布式缓存

文章目录一、redis持久化1.1.RDB持久化1.1.1.执行时机1.1.2.RDB原理1.1.3.小结1.2.AOF持久化1.2.1.AOF原理1.2.2.AOF配置1.2.3.AOF文件重写1.2.4.小结1.3.RDB与AOF对比二、Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试2.6.主从数据同步原理2.…

Codeforces Round #848 (Div. 2) A-E 赛时思路+正解

青大蒟蒻第一次在正式的div2div2div2中AcAcAc了五道题&#xff0c;也是小蒟蒻有史以来发挥最好的一场&#xff0c;这场过后我的cf也许可能也要变成黄了。 A. Flip Flop Sum 题意&#xff1a;给定一个a——ia——ia——i数组&#xff0c;权值仅为1或-1&#xff0c;我们选择相邻…

《死亡空间》重制回归!无法启动怎么办?

作为科幻生存恐怖系列的经典之作&#xff0c;《死亡空间》在推出15年后再次回归&#xff0c;果然引发热潮。精美震撼的科幻场景&#xff0c;强烈的视觉画面&#xff0c;加上阴森的3D 音效&#xff0c;重制版提升了身临其境之感&#xff0c;完全是沉浸式恐怖体验&#xff0c;只能…

红外遥控数码管显示

红外遥控器实物图红外遥控器接口电路数码管接口电路红外遥控数码管显示程序源代码/**************************红外遥控数码管显示************************** * 单片机&#xff1a;51单片机* 开发环境&#xff1a;keil * 名称:红外遥控数码管显示 * 功能&#xff1a;遥控器红外…

C语言常量

常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。常量可以是任何的基本数据类型&#xff0c;比如整数常量、浮点常量、字符常量&#xff0c;或字符串字面值&#xff0c;也有枚举常量。常量就像是常规的变量&#xff0c;只不过常量的值…

OpenMMLAB AI实战营第一课笔记

计算机视觉的发展 计算机视觉是什么 计算机视觉是一门让计算机学会"看"的学科&#xff0c;研究如何自动理解图像和视频中的内容 计算机视觉的发展 早期萌芽&#xff08;1960-1980&#xff09; 统计机器学习与模式识别(1990-2000) ImageNet 大型数据库(2006) 斯坦…

ocelot+consul治理服务

consulConsul 是HashiCorp公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比&#xff0c;Consul的方案更“一站式”&#xff0c;内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方…

程序员副业接单做私活避坑指南

这篇文章系统的分享了对接单做私活这件事情的思考&#xff0c;也给出一些干货建议。希望让大家少走一些弯路&#xff0c;不要被坑。 先说结论 不建议大家在接单这个事情上投入太大精力&#xff0c;如果你“贼心不改”&#xff0c;建议大家以比较随缘的方式对待这件事情。 再说…

Linux云主机配置

Linux云主机配置 推荐环境&#xff1a; Mac 阿里云主机Linux 阿里云主机Windows Xshell 阿里云主机&#xff08;选择使用&#xff09;Windows 虚拟机 阿里云主机 1.云主机配置 选择配置的过程中&#xff0c;请注意选择操作系统版本为Ubuntu 16.04 64位 或 Ubuntu 18.04 6…

多位大厂专家鼎力推荐,44个微服务架构设计模式pdf,程序员福利

前言 本文的目标是让架构师和程序员学会使用微服务架构成功开发应用程序。 本文不仅讨论了微服务架构的好处&#xff0c;还描述了它们的弊端。读者将掌握如何在使用单体架构和使用微服务架构之间做出正确的权衡。 谁应该阅读本文&#xff1f; 本文的重点是架构和开发&#…

前端vue2实现头部组件(自定义背景icon+抽屉式使用指南展示)

一、文章引导 #mermaid-svg-Sqlx5Ih7pUPfo8rw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Sqlx5Ih7pUPfo8rw .error-icon{fill:#552222;}#mermaid-svg-Sqlx5Ih7pUPfo8rw .error-text{fill:#552222;stroke:#55222…

Python多态及用法详解

Python 是弱类型语言&#xff0c;其最明显的特征是在使用变量时&#xff0c;无需为其指定具体的数据类型。这会导致一种情况&#xff0c;即同一变量可能会被先后赋值不同的类对象&#xff0c;例如&#xff1a;class CLanguage: defsay(self): print("赋值的是 CLanguage 类…

ElasticSearch从入门到出门【下】

文章目录数据聚合聚合的种类DSL实现聚合Bucket聚合语法聚合结果排序限定聚合范围Metric聚合语法RestAPI实现聚合API语法业务需求业务实现自动补全拼音分词器自定义分词器自动补全查询实现酒店搜索框自动补全修改酒店映射结构修改HotelDoc实体重新导入自动补全查询的JavaAPI实现…

阿里云领取免费2H2G云服务器&证书分享&个税抵扣:Apsara Clouder云计算专项技能认证:云服务器ECS入门

这个证书是你领服务器一个月内要考的&#xff0c;内容也不难。下面是90分左右的答案&#xff08;粗体&#xff09;&#xff0c;仅供参考……单选1&#xff0e;云服务器ECS以服务化的方式对客户提供&#xff0c;阿里云产品售后支持的时间段是&#xff1f;A.5*8B.7*8C.7*12D.7*24…

《MySQL高级篇》十四、多版本并发控制

文章目录1. 什么是MVCC2. 快照读与当前读2.1 快照读2.2 当前读3. 复习3.1 再谈隔离级别3.2 隐藏字段、Undo Log版本链4. MVCC实现原理之ReadView4.1 什么是ReadView4.2 设计思路4.3 ReadView的规则4.4 MVCC整体操作流程5. 举例说明5.1 READ COMMITTED隔离级别下5.2 REPEATABLE …

Gerrit3.4.1安装+its插件

环境依赖jdk11安装jdk11&#xff1a;下载&#xff1a; wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz解压&#xff1a; tar zxvf openjdk-1128_linux-x64_bin.tar.gzsudo update-alternatives --install /usr/bin/java java /home/jenki…

P问题、NP问题、NPC问题、NP-Hard问题

经常听到老师讲&#xff0c;某一个问题&#xff08;比如说&#xff0c;车辆路径规划问题Vehicle Routing Problem&#xff09;是一个NP-Hard问题,此外&#xff0c;我们在阅读文章的时候&#xff0c;也经常会读到某一个问题是NP-Hard问题的陈述&#xff0c;与此同时&#xff0c;…

Python程序设计-第3章Python函数与模块

第3章Python函数与模块一.预习笔记 3.1 函数定义&#xff1a;def 函数名称 (参数1&#xff0c;参数2 …)&#xff1a; 函数体 * 函数是某一个功能或者某一段程序代码的一个封装 * 函数名是用户自己定义的名称&#xff0c;与变量的命名规则相同&#xff0c;用字母开头&#x…