05 面向对象(下)


5.1 关键字:static

5.1.1 概念及使用

概念

1.static:静态的。
2.static 可以用来修饰:属性、方法、代码块、内部类。3.使用 static 修饰属性:静态变量(或类变量)。3.1 属性:是否使用 static 修饰,又分为:静态属性 VS 非静态属性(实例变量)实例变量:我们创建了类的多个对象,每个对象都独立的拥有了一套类中的非静态属 性。当修改其中一个非静态属性时,不会导致其他对象中同样的属性值的修饰。静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过静态变量去修改某一个变量时,会导致其他对象调用此静态变量时,是修改过的。3.2 static 修饰属性的其他说明:① 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用。② 静态变量的加载要早于对象的创建。③ 由于类只会加载一次,则静态变量在内存中也只会存在一次。存在方法区的静态域中。④       类变量     实例变量类       yes         no对象       yes         yes

通俗说

一套三室一厅一厨一卫的房子出租,三间卧室相当于类的三个实例化对象,其中有各自的属性如床、柜子、桌子等,彼此之前互不干扰,而厕所和厨房就像是static所修饰的属性,是所有人共用的,一个人修改了其余人的也更改。

示例

public class StaticTest {public static void main(String[] args) {Chinese.nation = "中国";//实例化前就有了Chinese c1 = new Chinese();c1.name = "姚明";c1.age = 40;c1.nation = "CHN";Chinese c2 = new Chinese();c2.name = "马龙";c2.age = 30;c2.nation = "CHINA";System.out.println(c1.nation); //CHINA,二者共用的nation//编译不通过
//      Chinese.name = "张继科";    }
}
//中国人
class Chinese{String name;int age;static String nation;
}

5.1.2 类变量的内存解析

5.1.3 static修饰方法

概念

1.使用 static 修饰方法:静态方法① 随着类的加载而加载,可以通过"类.静态方法"的方式调用②             静态方法      非静态方法类        yes         no对象       yes         yes③ 静态方法中,只能调用静态的方法或属性!!!非静态的方法中,可以调用所有的方法或属性
2.static 注意点:2.1 在静态的方法内,不能使用 this 关键字、super 关键字2.2 关于静态属性和静态方法的使用,从生命周期的角度去理解。3.开发中,如何确定一个属性是否需要声明 static 的?- 属性是可以被多个对象所共享的,不会随着对象的不同而不同的。- 类中的常量也常常声明为 static开发中,如何确定一个方法是否要声明为 static 的?- 操作静态属性的方法,通常设置为 static 的- 工具类中的方法,习惯上声明为 static 的。比如:Math、Arrays、Collections

5.1.4 题目示例

//static 关键字的应用
public class CircleTest {public static void main(String[] args) {Circle c1 = new Circle();Circle c2 = new Circle();Circle c3 = new Circle(3.4);System.out.println("c1 的 ID:" + c1.getId());//1001System.out.println("c2 的 ID:" + c2.getId());//1002System.out.println("c3 的 ID:" + c3.getId());//1003System.out.println("创建圆的个数: " + Circle.getTotal());//3}
}class Circle{private double radius;private int id; //需要自动赋值public Circle(){id = init++;total++;}public Circle(double radius){this();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;}
}

5.1.5 单例设计模式

概念

1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例

2.如何实现?

​ 饿汉式 VS 懒汉式

3.区分饿汉式和懒汉式。

饿汉式:坏处:对象加载时间过长。

​ 好处:饿汉式是线程安全的。

懒汉式:好处:延迟对象的创建。

​ 坏处:目前的写法,会线程不安全。—》到多线程内容时,再修改

代码示例1—饿汉式

public class SingletonTest {public static void main(String[] args) {Bank bank1 = Bank.getInstance();Bank bank2 = Bank.getInstance();System.out.println(bank1 == bank2);//true,因为只有一个对象}
}//单例的饿汉式
class Bank{//1.私有化类的构造器private Bank(){  }//2.内部创见类的对象//4.要求此对象也必须声明为静态的private static Bank instance = new Bank();//3.提供公共的静态的方法,返回类的对象。public static Bank getInstance(){return instance;}
}

代码示例2—懒汉式

public class SingletonTest2 {public static void main(String[] args) {Order order1 = Order.getInstance();Order order2 = Order.getInstance();    System.out.println(order1 == order2);//true}
}
class Order{//1.私有化类的构造器private Order(){    }//2.声明当前类对象,没有初始化。//此对象也必须声明为 static 的private static Order instance = null;//3.声明 public、static 的返回当前类对象的方法public static Order getInstance(){if(instance == null){instance = new Order();           }return instance;}
}

5.2 main()方法的语法(了解)

使用说明

1.main()方法作为程序的入口;

2.main()方法也是一个普通的静态方法

3.main()方法也可以作为我们与控制台交互的方式。(之前,使用 Scanner)

5.3 代码块(类的成员之四)

JavaSE---05面向对象(下)相关推荐

  1. 【JavaSE】面向对象之多态、向上转型与向下转型

    本专栏为 JavaSE 的学习笔记及相关项目,专栏长期免费更新 ❤️ ❤️ ❤️ ❤️ 个人主页:Nezuko627 欢迎来访~~~ ⭐️往期回顾: [JavaSE]继承中内存发生了什么变化?这篇文章 ...

  2. 对象属性结构赋值_(六)面向对象-下

    (六)面向对象-下 关键字:static static 可以用来修饰的结构:主要用来修饰类的内部结构 属性.方法.代码块.内部类 static修饰属性:静态变量(类变量 属性,是否使用static修饰 ...

  3. JAVASE学习 面向对象

    JAVASE学习 面向对象 1.面向对象(构造方法Constructor概述和格式) A:构造方法概述和作用 给对象的数据(属性)进行初始化 B:构造方法格式特点 a:方法名与类名相同(大小也要与类名 ...

  4. 【JavaSE】面向对象(下)(311~365)

    311.面向对象(下)-每天一考 1.如何实现向下转型?需要注意什么问题?如何解决此问题? //Person p = new Man(); //使用强转符:() Man m = (Man)p; //可 ...

  5. Java全栈(二)JavaSE:14.面向对象下

    一.抽象类 1.1 由来 抽象:即不具体.或无法具体 例如:当我们声明一个几何图形类:圆.矩形.三角形类等,发现这些类都有共同特征:求面积.求周长.获取图形详细信息.那么这些共同特征应该抽取到一个公共 ...

  6. 面向对象下 abstract关键字(宋红康JAVASE)

    abstract关键字的使用 1 abstract:抽象的 2 abstract可以用来修饰的结构:类.方法 3 abstract修饰类:抽象类 此类不能实例化 抽象类中一定有构造器,便于子类实例化时 ...

  7. 关于javase的面向对象部分的知识点的梳理,欢迎各位指正和补充

    面向对象 面向对象思想 类的关系 关联 关联是一种描述两个类之间行为的一般二元关系. 关联中的每个类可以指定一个数字或一个数字区间,表示该关联涉及类中的多少个对象. 在 Java 代码中,关联可以用数 ...

  8. JavaSE之面向对象

    面向对象概述 概述 编程语言是人类创造的,因此里面很多思想来源于生活.程序员使用编程技术开发软件也是为了解决生活中一些繁琐的问题,这一段内容将要学习一种编程思想-面向对象,Java就是一门面向对象设计 ...

  9. 【JavaSe】面向对象篇(五) 三大特征之二继承

    JavaSe·面向对象篇(五) 三大特征之二继承 1. 面向对象三大特质之继承 1.1 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那 ...

最新文章

  1. 面试官:高并发下,如何保证分布式唯一全局 ID 生成?
  2. OpenAI高调站队:深度学习框架以后主要用PyTorch
  3. decisiontreeregressor_机器学习算法-Decision Tree
  4. 牛腩新闻发布系统(2)使用存储过程查询表
  5. CISS.SideMenu的bug
  6. 关于Java的23种设计模式的有趣见解
  7. Linux .bin安装文件制作
  8. MySql中 delimiter 详解
  9. iOS编写最简单的界面切换应用
  10. Linux 命令(107)—— systemctl 命令
  11. Excel 使用ODBC 连接mysql 5.0
  12. Open Set Domain Adaptation 开集领域适应
  13. TSL1401 CCD传感器驱动
  14. POJ 2706 棋盘连线游戏(模拟)
  15. 【转载】TinyXML2使用教程
  16. java 编配和弦_六个和弦编配小诀窍,让你的弹唱伴奏丰富好听
  17. VMWare虚拟机无法正常开启,显示模块“Disk”启动失败的解决办法
  18. 华为eNSP路由器报错误代码:40,41的问题解决办法。路由器启动无限###。eNSP安装。
  19. 微信小程序连接蓝牙电子秤
  20. UART项目验证(一) uart协议与uart ip的理解

热门文章

  1. libsodium引用报错FileNotFoundError: [Errno 2] No such file or directory: b‘liblibsodium.a‘
  2. 云瞻外卖江湖外卖满天星外卖美赚外卖CPS系统小程序软件源码开发
  3. Windows查看和设置网卡的MTU值
  4. windows 通过修改注册表来修改主机名
  5. 心里窝火无语的图片_很无语的心情说说带图
  6. 解决谷歌翻译TranslateException: Error getting access token for service account: Connection reset
  7. 关于数据挖掘的文献综述
  8. ROS python编程
  9. 低代码指南100解决方案:41还在用excel做进销存管理?这个系统让采购、仓库、销售管理更简单
  10. 软工视频-----第三章 需求分析