java面向对象:关键字 —(16)

static:静态的

1.可以用来修饰的结构:主要用来修饰类的内部结构

属性、方法、代码块、内部类

2.static修饰属性:静态变量(或类变量)

	2.1 属性,是否使用static修饰,又分为:静态属性  vs 非静态属性(实例变量)
  •     实例变量:我们创建了类的多个对象,每个对象都独立的拥一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
    
  •       静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
    
  •  2.2 static修饰属性的其他说明:
    
  •   ① 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
    
  •      ② 静态变量的加载要早于对象的创建。
    
  •      ③ 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
    
  •      ④		类变量	实例变量
    
  •      类		yes		no
    
  •      对象	yes		yes
    
  •     2.3 静态属性举例:System.out; Math.PI;
    

3.静态变量内存解析:

在这里插入图片描述

4.static修饰方法:静态方法、类方法

① 随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
② 静态方法 非静态方法

  •      类		    yes		no
    
  •      对象		yes		yes
    

③ 静态方法中,只能调用静态的方法或属性
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性

5. static的注意点:

5.1 在静态的方法内,不能使用this关键字、super关键字
5.2 关于静态属性和静态方法的使用,大家都从生命周期的角度去理解。

6.如何判定属性和方法应该使用static关键字:

6.1 关于属性

属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
类中的常量也常常声明为static

6.2 关于方法

操作静态属性的方法,通常设置为static的
工具类中的方法,习惯上声明为static的。 比如:Math、Arrays、Collections
7.使用举例:
举例一:Arrays、Math、Collections等工具类
举例二:单例模式
举例三:
class Circle{

private double radius;
private int id;//自动赋值public Circle(){id = init++;total++;
}public Circle(double radius){this();

// id = init++;
// total++;
this.radius = radius;

}private static int total;//记录创建的圆的个数
private static int init = 1001;//static声明的属性被所对象所共享public double findArea(){return 3.14 * radius * radius;
}public double getRadius() {return radius;
}public void setRadius(double radius) {this.radius = radius;
}public int getId() {return id;
}public static int getTotal() {return total;
}

}

1.设计模式的说明

1.1 理解

设计模式是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式。

1.2 常用设计模式 — 23种经典的设计模式 GOF
创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

2.单例模式

2.1 要解决的问题:
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。
2.2 具体代码的实现:
饿汉式1:
class Bank{

//1.私化类的构造器
private Bank(){}//2.内部创建类的对象
//4.要求此对象也必须声明为静态的
private static Bank instance = new Bank();//3.提供公共的静态的方法,返回类的对象
public static Bank getInstance(){return instance;
}

}

饿汉式2:使用了静态代码块
class Order{

//1.私化类的构造器
private Order(){}//2.声明当前类对象,没初始化
//4.此对象也必须声明为static的
private static Order instance = null;static{instance = new Order();

}

//3.声明public、static的返回当前类对象的方法
public static Order getInstance(){return instance;
}

}
懒汉式:
class Order{
//1.私化类的构造器
private Order(){ }
//2.声明当前类对象,没初始化
//4.此对象也必须声明为static的
private static Order instance = null;

//3.声明public、static的返回当前类对象的方法
public static Order getInstance(){if(instance == null){instance = new Order();}return instance;
}

}
2.3 两种方式的对比:

  • 饿汉式:
  •  坏处:对象加载时间过长。
    
  •  好处:饿汉式是线程安全的
    
  •  懒汉式:好处:延迟对象的创建。
    
  •   目前的写法坏处:线程不安全。--->到多线程内容时,再修改
    

main()方法作为程序的入口
main()方法也是一个普通的静态方法
main()方法可以作为我们与控制台交互的方式。(之前:使用Scanner)

如何将控制台获取的数据传给形参:String[] args?
运行时:java 类名 “Tom” “Jerry” “123” “true”

sysout(args[0]);//“Tom”
sysout(args[3]);//“true” -->Boolean.parseBoolean(args[3]);
sysout(args[4]);//报异常

小结:一叶知秋
public static void main(String[] args){//方法体}

权限修饰符:private 缺省 protected pubilc ---->封装性
修饰符:static \ final \ abstract \native 可以用来修饰方法
返回值类型: 无返回值 / 有返回值 -->return
方法名:需要满足标识符命名的规则、规范;“见名知意”
形参列表:重载 vs 重写;参数的值传递机制;体现对象的多态性
方法体:来体现方法的功能

main(){
Person p = new Man();
p.eat();
//p.earnMoney();

Man man = new Man();
man.eat();
man.earnMoney();
}

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

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

相关文章

《少年先疯队》第九次团队作业:Beta冲刺与团队项目验收

博文简要信息表: 项目内容软件工程https://www.cnblogs.com/nwnu-daizh/本次实验链接地址https://www.cnblogs.com/nwnu-daizh/p/11056511.html团队名称少年先疯队作业学习目标(1)掌握软件黑盒测试技术;(2)…

vue-resource jsonp跨域问题解决方法

最近在学习vue.js 碰到个ajax跨域请求的问题,之前知道可以用jsonp解决,但是一直没实践过,这次用发现里面好多问题,所以现在记录下来,希望可以给刚接触使用jsonp的同学一点帮助! 关于什么是jsonp&#xff0c…

虚拟机无法连接至网络

问题: 虚拟机中的win XP系统无法连接至外部win10系统网络 尝试解决方法: 1)换用桥接模式和NAT模式,无效 2)恢复虚拟机网络属性至默认状态,无效 最终解决方法: 换用外部无线网络,即能…

java面向对象:关键字 —(17)

interface:接口 1.使用说明: 1.接口使用interface来定义 2.Java中,接口和类是并列的两个结构3.如何定义接口:定义接口中的成员 3.1 JDK7及以前:只能定义全局常量和抽象方法>全局常量:public static final的.但是…

原生js来实现对dom元素class的操作方法

jQuery操作class的方式非常强大 写了一个利用原生js来实现对dom元素class的操作方法 1.addClass:为指定的dom元素添加样式 2.removeClass:删除指定dom元素的样式 3.toggleClass:如果存在(不存在),就删除(添加)一个样式 4.hasClass:判断样式是否存在 下面为一toggleC…

python+selenium配置Edge浏览器

Chrome, Firefox只需要修改conftest.py文件中的 pytest.fixture(scopesession)def browser(): return BzwUtil.read_yml(config.yml,WEB_INFO,BROWSER) add option in pytest command line def pytest_addoption(parser): parser.addoption("--browser", actio…

JSON.parse和JSON.stringify方法

JSON.parse() JSON.parse()方法将json字符串转化为Javascript值或对象。 语法 JSON.parse(text[,reviver]) 参数 text:要被解析成Javascript值的字符串 reviver:若是一个函数则规定了原始值(text)如何被解析改造,在被返回前。 示例 JSON.parse({}); //…

java面向对象:异常处理 —(18)

1. 异常的体系结构 java.lang.Throwable |-----java.lang.Error:一般不编写针对性的代码进行处理。|-----java.lang.Exception:可以进行异常的处理|------编译时异常(checked)|-----IOException|-----FileNotFoundException|-----ClassNotFoundException|------运行时异常(un…

vue请求简单配置

简单记录一下vue的http请求配置相关 测试环境请求接口设置:   1. config/dev.env.js添加:     module.exports merge(prodEnv, {       NODE_ENV: "development",       API_ROOT: "http://", //配置http请求头     })…

【vue报错】——listen EADDRINUSE :::8080 解决方案

问题原因: 此项错误表示 8080 端口被占用 解决方案一: 打开cmd 输入:netstat -ano 查看所有端口信息,如图,找到端口 8081,以及对应的 PID 输入:tskill PID 即可杀死进程 解决方案二&#xff1a…

记录_20190626

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法 原来JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下…

String与Array

public class Api {Testpublic void StringApi(){// equals() 判断内容是否相同区分大小写// equalsIgnoreCase() 判断内容是否相同不区分大小写// length() 获取长度// charAt(int index) 获取某个索引位置的字…

HTML与CSS布局技巧总结

很多人对CSS的布局有困惑,实际的应用场景中由于布局种类多难以选择。今天我花些时间总结下自己对CSS布局的理解,分析下了解各种布局的优劣,同时希望能分享给初入前端的朋友们一些在布局上的经验,如果有那些地方总结的不好&#xf…

当谈论迭代器时,我谈些什么?

花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直希望能聚集一些有其它语言基础的同学,一…

在Vue-cli项目中使用echarts

该示例使用 vue-cli 脚手架搭建 安装echarts依赖 npm install echarts -S11 或者使用国内的淘宝镜像: 安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org11 使用 cnpm install echarts -S11 创建图表 全局引入 main.js // 引入echarts im…

Java的模板文件配置

Java的Mappers文件配置 <?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.qfedu.…

Python爬虫学习二

1、selenium自动测试工具 2、主要使用selenium的目的是跳过登录验证3、下载驱动器下载请求库from selenium import webdriver import time#1、 直接在script文件夹中找驱动 driverwebdriver.Chrome() time.sleep(5) driver.close()#2、找到驱动路径 #webdriver.Chrome(rD:\Pyth…

通过GitHub Pages创建个人主页

登陆github,创建新仓库&#xff0c;写入名字, 这里要以github.io做后缀, 不然创建出来的不是GitHub Pages 打开终端, cd到自己想要的文件夹后clone到本地 git clone https://github.com/username/username.github.io 进入这个项目文件夹 cd username.github.io 把写好HTML项目拷…

Spring IOC 配置文件模板

基于XML的普通设置 <?xml version1.0 encodingUTF-8 ?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframework.org/schema/contex…

validate+jquery+ajax表单验证

1.案例 1.1 Html form表单内容 <form class"cForm" id"cForm" method"post" action""> <p> <label for"user">用户名</label> <input id"user" name"user" required minlen…