静态方法

第2章 创建和销毁对象

。_饼干妹妹 提交于 2020-02-07 23:48:03
第1条 用静态工厂方法代替构造器 优点 1.静态工厂方法与构造器不同的第一大优势在于,他们有名称 2.不必每次调用他们都创建一个新对象,如Boolean中的valueof,都是内部自己维护的两个单例,根据传入的参数不同,分别返回True或者False public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); 3.返回原返回类型的任何子类型的对象,API可以返回对象,同时又不会使对象的类变成公有(这里理解为Collections【Collections的构造器为private】中的东西,里面有很多静态内部类,通过暴露静态公有的方法创建无法new出来的对象) 4.所有返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值 5.方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在(理解为解耦,可以先没有具体的实现类,如JDBC返回Connection) 缺点 1.类如果不含有公有的或者受保护的构造器,就不能被子类化(可能意思是如果构造函数私有

Java面向对象大致梳理

你。 提交于 2020-02-07 21:19:19
面向对象思想、 面向对象思想概述: Java设计语言面向对象: Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面 向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现。 类和对象: 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物 属性:就是该事物的状态信息。 行为:就是该事物能够做什么。 对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性 和行为。 类与对象的关系 : 类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。 类是对象的模板,对象是类的实体。 面向对象之封装: 概述: 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

静态联编和动态联编

北战南征 提交于 2020-02-07 06:48:38
转载自: http://blog.csdn.net/blucexi/article/details/1253265 联编 就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法: 静态联编 和 动态联编 。 静态联编 是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型,C语言中,所有的联编都是静态联编,据我所知道的,任何一种编译器都支持静态联编(废话)。 动态联编 是指在程序执行的时候才将函数实现和函数调用关联,因此也叫运行时绑定或者晚绑定,动态联编对函数的选择不是基于指针或者引用,而是基于对象类型,不同的对象类型将做出不同的编译结果。C++中一般情况下联编也是静态联编,但是一旦涉及到多态和虚拟函数就必须要使用动态联编了。下面将介绍一下多态。 多态 :字面的含义是具有多种形式或形态。C++多态有两种形式,动态多态和静态多态;动态多态是指一般的多态,是通过类继承和虚函数机制实现的多态;静态多态是通过模板来实现,因为这种多态实在编译时而非运行时,所以称为静态多态。 动态多态例子: #include

Java SE学习总结 Day (9)

雨燕双飞 提交于 2020-02-07 00:30:28
Day 09开篇: " 今天java基础主要学习了面向对象的匿名对象,封装,this关键字,stastic关键字,public static void main(String []args){}每个关键字的作用 等。 " 知识点反馈: 今天的知识点和每周总结思维导图 一.匿名对象: 1. 概念: 就是没有名字的实体,也就是说这个这个实体只存在了堆内存地址,并没有栈空间(就是没有名字的对象) 2. 匿名对象的用途: (1)当对象对方法只进行一次调用的时候,可以使用匿名对象进行简化 (为什么?因为匿名对象没有栈空间,所以只能使用一次,第二次使用一定会产生新的空间出来,如果你的方法被多次调用,且要求使用 的是同一个对象的时候,匿名就不合适了,他只适合这个对象一次性使用的时候。) (2)可以作为实际参数进行传递或者返回(前提是你对于这个对象的使用度只有一次的时候) 3. 匿名对象的好处: (1) 使用完毕就是垃圾,等着GC来回收 (2) 语法简洁,不需要创建对象 4. 匿名对象的缺点: 就是一次性使用的 二.封装: 1. 概念: 隐藏内部实现细节,提供对外的公共访问方式;一般来说,一个即将被作为对象的类,它里面所有的属性都应该是被私有化的。 2. 封装好处: (1)隐藏了内部实现细节 (2)提高了代码的安全性 (3)相对来说,简化了代码检验程度 3.private关键字:

设计模式之单例模式

心不动则不痛 提交于 2020-02-06 18:06:16
1.单例模式简介 单例模式,就是采取一定的方法保证在整个的软件系统中,对某一个类只存在一个对象实例,并且该类只提供一个取得其对象的方法。 2.单例模式的实现方法 单例模式的实现方法分为8种,主要分为: 1.饿汉式(静态常量)(√) 2.饿汉式(静态代码块)(√) 3.懒汉式(线程不安全) 4.懒汉式(线程安全,同步方法) 5.懒汉式(线程安全,同步代码块) 6.双重检查(√) 7.静态内部类(√) 8.枚举类(√) 2.1: 饿汉式(静态常量) 核心代码 : private static SingletonByStatic instance = new SingletonByStatic(); 优点 :简单,在类装载的时候已经完成了实例化,避免了线程同步 缺点 :在类装载的时候就完成实例化,没有达到 lazyloading(懒加载),如果从始至终没有使用过这个实例,则会造成内存的浪费 。导致类装载的原因可能有很多种,这时候万一初始化了instance,未使用。造成了内存的浪费 完整代码: package com.liz.GOF23.singleton.hungry_man; //饿汉式(静态变量) //优点: 简单,在类装载的时候已经完成了实例化,避免了线程同步 //缺点: 在类装载的时候就完成实例化,没有达到 lazyloading(懒加载),如果从始至终没有使用过这个实例

在Azure Storage托管HTTP静态网站

笑着哭i 提交于 2020-02-06 15:37:25
本文演示了在Azure Storage托管HTTP静态网站。 注意:HTTP已经不建议使用。 本案例实战视频请参考: 通过存储托管静态网站http.mp4 创建Azure StorageV2 存储账户 账户类型选择“StorageV2(通用版V2)”; 本例中,需要禁用安全传输,禁用后,可以通过HTTP而不是强制使用HTTPS即可访问; 其余值保持默认即可。 启用Storage Account静态网站功能 启用静态网站功能,并输入索引文件名称,通常来讲,我们会命名为index.html。 本案例中,我们准备了一个静态页面index.html, 该页面只有一行内容: <h1>Hello World!</h1> 实际上Storage上的静态网站支持 CSS/JS等。 可以设置404页面或为空。 保存完成后可以查看到自动创建了一个$web的容器,同时可以看到静态网站的访问终结点. 上传静态网站 将准备好的index.html文件上传到$web容器中。 上传完成后,可以使用默认的主终结点访问网站: 设置域名解析 本例中我们将设置将web.5gn.link CNAME到 seanyutest.z1.web.core.chinacloudapi.cn/。 登录域名控制台,本例中我们的域名在阿里云, 添加CNAME记录: 其中记录值即在上一步中访问的地址,或者可以在如下页面查询到: 这里注意的是

同步方法

自古美人都是妖i 提交于 2020-02-06 15:25:11
同步方法 使用synchronized关键字修饰一个方法,该方法中所有的代码都是同步的。 非静态的同步方法的锁对象是神马? 答:非静态的同步方法的锁对象是this 静态的同步方法的锁对象是什么?为什么? 答:是该类的字节码对象。静态是优先于对象而存在的,静态方法中是不能定义this和super的,只有当你创建对象的时候this才有值。 class Printer { public static void print1() { //锁对象可以是任意对象,但是被锁的代码需要保证是同一把锁,不能用匿名对象 synchronized(Printer.class){ System.out.print("黑"); System.out.print("马"); System.out.print("程"); System.out.print("序"); System.out.print("员"); System.out.print("\r\n"); } } /* * 非静态同步函数的锁是:this * 静态的同步函数的锁是:字节码对象 */ public static synchronized void print2() { System.out.print("传"); System.out.print("智"); System.out.print("播"); System.out.print(

再谈JAVA

一曲冷凌霜 提交于 2020-02-06 07:15:21
静态域与静态方法 静态域 如果将域定义为static,一个类中只有一个这种域。当创建一个对象时,这个对象会拷贝实例域。但是static这种域不会改变,也就是说不会因为对象的改变而改变,即使没有对象也存在,通常称为类域. 静态变量 静态变量用final修饰成为静态常量,声明静态常量是因为防止其他对象有自己一份拷贝,而用final修饰是因为防止再次将域改变 静态方法 静态方法是一种不能向对象实施操作的一种方法。所以不能访问类的实例域,但是可以访问静态域。可以使用对象调用静态方法,但是不适用。 在以下两种情况下使用静态方法 一个方法不需要访问对象状态,只需要提供显示参数 一个方法只需要访问静态域 工厂方法 静态方法还有一种常见的用途,构造对象。 使用工厂方法构造对象的原因 无法命名构造器,构造器必须与类名相同 使用构造器无法改变构造对象的类型 main方法 因为静态方法不需要使用对象就可以调用,不需要构造对象就可以使用。main方法还没有创建对象就开始运行,所以声明成静态方法 方法参数 方法参数传递分为两种类型 基本数据类型 对象的引用 第一种属于拷贝参数,而第二种是传递的地址可以改变原来的数值 但是对Java对象的采用的不是引用传递,而是拷贝了地址。 来源: CSDN 作者: hello妈耶儿 链接: https://blog.csdn.net/V2636011127/article

方法的调用:递归

*爱你&永不变心* 提交于 2020-02-06 06:58:21
1、静态方法与非静态方法 静态方法和非静态方法的区别是: 静态方法有static;非静态方法没有。 如:静态方法: public class students { //静态方法 public static void say(){ System.out.println("学生说话了"); } } 调用静态方法: public static void main(String[] args) { students.say(); } 非静态方法: public class Student { //非静态方法 public void say(){ System.out.println("学生说话了"); } 调用非静态方法: public static void main(String[] args) { //实例化这个类 new //对象类型 对象名=对象值 // Student student=new Student(); student.say(); } 都是非静态方法或静态方法,则方法a可以在直接调用方法b: public void a(){ b(); } public void b(){ } 若a是静态,b不是,则不行: //和类一起加载的 public static void a(){ b(); } //类实例化之后才存在 public void b(){ } 2、形参与实参

静态代理和动态代理的代码笔记

感情迁移 提交于 2020-02-06 03:56:06
基础类,创建一个接口和一个实现方法 package com.opk.proxy; public interface BuyHouse { void buyHouse(); } package com.opk.proxy; public class BuyHouseImpl implements BuyHouse { @Override public void buyHouse() { System.out.println("我要买房"); } } 静态代理的实现 package com.opk.proxy; public class BuyHouseProxy implements BuyHouse { private BuyHouse buyHouse; public BuyHouseProxy(final BuyHouse buyHouse) { this.buyHouse = buyHouse; } @Override public void buyHouse() { System.out.println("买房前准备"); buyHouse.buyHouse(); System.out.println("买房后装修"); } } package com.opk.proxy; public class ProxyTest { public static void main