静态方法

第10章-内部类

倖福魔咒の 提交于 2020-02-06 03:39:26
Think in java 读书笔记 pikzas 2019.05.05 第十章 内部类 知识点 什么是内部类 可以将一个类定义在另一个类的内部 内部类的分类 静态内部类(也承嵌套类) 成员内部类 局部内部类 匿名内部类 内部类的作用 解决java的没有多继承的问题 静态内部类 类在定义的时候加上了static 关键字 不能和外部类有相同的名字 被编译为一个完全独立的.class文件,形如OuterClass$InnerClass.class 只可以访问外部类的静态成员和静态方法 静态内部类的创建方式 OuterClass.InnerClass inner = new OuterClass.InnerClass(); package com.learnjava.innerclass; class StaticInner { private static int a = 4; // 静态内部类 public static class Inner { public void test() { // 静态内部类可以访问外部类的静态成员 // 并且它只能访问静态的 System.out.println(a); } } } public class StaticInnerClassTest { public static void main(String[] args) {

Java内部类

南楼画角 提交于 2020-02-06 03:33:24
—— 你放心去浪,我替你说谎。 一、内部类与外部类之间的关系 1、内部类定义于外部类中,是一个相对独立的实体,对该外部类文件进行编译,会产生两个.class文件,其中内部类的.class文件名名称为 外部类名$内部类名.class。 2、内部类可以访问外部类的所有方法和属性,即使是私有,这是因为内部类持有一个外部类的一个引用。外部类无法直接访问内部类的属性和方法,必须通过内部类的对象引用才能进行访问,如果是静态内部类,外部类可以通过内部类的类名来引用静态变量。 3、内部类如果要声明静态变量,内部类必须声明为静态类。 二、非静态内部类对象的创建 1、在外部类之外创建内部类对象,需要先创建外部类对象,在通过外部类对象调用内部类的构造方法进行实例化。外部类对象只能调用内部类的构造方法,非构造方法以及元素必须通过内部类引用才能调用。 2、如果在外部类内部创建内部类对象,可以直接调用内部类的构造方法进行创建。构造方法可以被外部类调用,其他方法和属性必须通过内部类引用或类名才能调用。 三、内部类的分类 1、成员内部类:定义在外部类中的普通类(非static),属于外部类的成员,可以访问外部类的任何变量和方法。 2、局部内部类:定义在外部类的局部范围内,例如定义在方法中,只允许在方法中访问该内部类,不允许在方法外访问。局部内部类一般用在用于辅助解决问题而又不希望创建一个公共类的场景。 3

Java基础

倾然丶 夕夏残阳落幕 提交于 2020-02-06 02:35:54
面向对象及三大特性 答:面向对象是一种思想,将复杂问题简单化,把相关数据和方法当作一个整体来看。三大特性为封装继承和多态。 封装:将事物封装为一个类,减少耦合,隐藏细节。保留接口与外界联系,当接口内部改变时,不会影响外部的调用。 继承:从一个已知的类中派生一个新的类,新类拥有已知类的属性和方法,并能重写或覆盖来增加已知类的能力。 多态:一个程序中存在多个同名的不同方法。实现方式:子类对父类的覆盖、类对方法的重载、子类作为父类对象使用。 关于封装 对类进行内部处理,在get/set方法中进行内部逻辑封装,外部直接调用。 关于继承 覆盖@Override 覆盖=重写,即父类有方法A,子类拓展了方法A并加了新功能,则称之为子类覆盖或重写了方法A。 关于多态 重载Overload 一个类中存在多个同名的不同方法,这些方法参数个数、顺序和类型不同构成方法的重载。 构造器不能被重写,但能被重载 **只有返回值不同,不构成重载!**因为有时我们调用方法并不关心其返回值。 子类对象作为父类对象使用 涉及向上转型和向下转型。向上可以直接转,子类通父类。向下需要强制类型转换,父类不懂子类。 JDK、JRE和JVM 答:基本概念如下: JDK(Java Development Kit)开发工具包,java开发环境的核心组件,提供编译调试和运行java程序所有的工具和文件。 JRE(Java

【Java基础08】内部类、枚举类、日期和时间、Math、Random

妖精的绣舞 提交于 2020-02-06 02:01:26
1 内部类 1.1 概念 大部分时候,类被定义成一个独立的程序单元,在某些情况下,也会把一个类放到另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类被称为外部类。 1.2 作用 1.提供更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。 2.内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问。但外部类不能访问内部类的实现细节,例如内部类的成员变量。 3.匿名内部类适合用于创建那些仅需要一次使用的类。 注意: 1.内部类比外部类可以多使用三个修饰符:private、protected、static,外部类不可以使用这三个修饰符。 2.非静态内部类不能拥有静态成员。 1.3 非静态内部类 成员内部类分为两种,静态内部类和非静态内部类,使用static修饰的成员内部类是静态内部类,没有使用static修饰的成员内部类是非静态内部类。(在方法中定义的内部类被称为局部内部类) 不允许在外部类的静态成员中直接使用非静态内部类,不允许在非静态内部类中定义静态成员。非静态内部类里不能有静态方法、静态成员变量、静态初始化块。 1.4 静态内部类 如果使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。因此使用static 修饰的内部类被称为类内部类

SpringBoot加载静态资源的问题

好久不见. 提交于 2020-02-05 06:11:44
SpringBoot在加载静态资源时,与之相关的配置项主要有四个 spring.mvc.view.prefix=/static/ spring.mvc.view.suffix=.html spring.mvc.static-path-pattern=/static/** spring.resources.static-locations=classpath:/static/page/ 其中: 1. spring.mvc.view.prefix和spring.mvc.view.suffix两者是前缀与后缀,需要注意的是,这里说的前缀与后缀是相对于Controller层返回的String或者ModelAndView里面的viewName的。例如,配置文件用的是上面的配置文件,Controller层如下: @Controller @RequestMapping("/page") public class PageController { @RequestMapping("/index") public String index(){ return "index2"; } } 此时,会返回的是存储静态资源目录下的static目录下的index2.html文件。 2.spring.resources.static-locations: 这个就是配置上面讲的静态资源配置目录

从C#到Python —— 4 类及面向对象

▼魔方 西西 提交于 2020-02-04 13:18:08
如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented)应该不会陌生。Python与C#一样,能够很好地支持面向对象的编程模式。本章对Python中面向对象编程的基本知识进行介绍,并将其与C#中的对应部分进行比较。 4.1 类的定义与实例化 4.1.1 类的定义 与C#一样,Python使用class关键字定义一个类。一个最简单的类定义语句如下: 1 class A:2 pass 它等价于C#中的 class A{}。当然,以上语句没有任何实际意义,它只是告诉我们什么是定义一个类所必需的,即:class关键字,类名和冒号,pass关键字只用来占位,相当于C#中花括号的作用。 4.1.2 类的实例化 类是定义对象格式的模板,而对象则是类的实例,通过类创建对象的过程称为类的实例化。在C#中,需要使用new关键字实例化一个类,例如 A a = new A(); 在上条语句中,C#完成了两件事情:首先声明一个类型为A的变量a,然后用new运算符创建一个类型为A的对象,并将该对象的引用赋值给变量a。而在Python中没有new关键字,同时它是一种动态语言,不需要事先指定变量的类型,只需要: a = A() 即可创建一个类型为A的对象,看起来好像是将类当作一个函数调用,返回值是新创建的对象。 4.2 类的成员变量 4.2.1 为类添加数据

Java 小结

北城以北 提交于 2020-02-04 10:17:39
1 hash • string的hashcode计算: hashcode=hashcode*31+string值 • hash下标的计算: [(hashcode>>16)异或hashcode]&(n-1),n是2的倍数(,负载因子默认0.75 • resize的实现 首先容量翻倍(便于resize的实现),然后,计算(hashcode)&n 的首位(即高四位的最低一位),如果是0的位子,下标不变,如果是1的位子,下标变为之前的值+空间容量增量。一条链表变成两条链表。进行判断,改变索引。 2.反射的三种方式 • 通过Class类的静态方法实现: class1=Class.froName(“类名"); • 通过class属性: class=Personcc.class; • 通过getClass方法: Person person=new Person(); Class<?> class=peison.getClass(); 3.静态代理和动态代理 • 静态代理: 代理对象和目标对象均实现同一个行为接口,代理类和目标类分别具体实现接口逻辑,在代理类的构造函数中实例化一个目标对象,在代理类中调用目标对象的行为接口。 • 动态代理: 提供实际类,利用反射机制,自动生成代理类,也可对需要增强的方法进行定位,避免静态带来的麻烦。 4.序列化 序列化是一种持久化存储文件

Java基本概念

梦想的初衷 提交于 2020-02-04 05:44:05
问题及答案来源自《Java程序员面试笔试宝典》第四章 Java基础知识 4.1基本概念 1、J ava语言有何优势? 纯面向对象的语言 具有平台无关性,可移植性好 提供了很多内置的类库 提供了对web应用开发的支持 具有很好的安全性和健壮性 除去了C++中难以理解和容易混淆的特性(头文件、指针、多重继承等) 2、Java与C/C++有何区别? Java和C++的相同点: Java和C++都是面向对象语言,都使用了面向对象思想(例如封装、继承、多态等) 由于面向对象有许多非常好的特性(继承、组合等),因此二者都有很好的重用性 Java和C++的不同点: Java为解释性语言,而C/C++为编译型语言(Java执行速度比C/C++慢,但Java能跨平台执行而C/C++不能) Java代码运行过程:源代码通过Java编译器编译成字节码(.class),然后由JVM解释执行 C/C++代码运行过程:源代码通过编译和链接后生成可执行的二进制代码 Java为纯面向对象语言,所有代码要在类中实现,而C++兼具面向过程和面向对象编程的特点 Java没有C/C++中的指针 Java没有C++中的多重继承,但是Java引入了接口的概念,可以通过实现多个接口来实现与C++中多重继承一样的目的 在C++中需要开发人员管理内存分配(申请和释放),而Java中提供了垃圾回收器来实现垃圾的自动回收 C+

ZooKeeper(7):ZooKeeper客户端Apache Curator基本Api

≡放荡痞女 提交于 2020-02-03 21:21:02
1.创建会话 1.1.使用静态工程方法创建客户端 一个例子如下: RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.newClient(connectionInfo,5000,3000,retryPolicy); newClient静态工厂方法包含四个主要参数: 1.2.使用Fluent风格的Api创建会话 核心参数变为流式设置,一个列子如下: RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.builder() .connectString(connectionInfo) .sessionTimeoutMs(5000) .connectionTimeoutMs(5000) .retryPolicy(retryPolicy) .build(); 1.3.创建包含隔离命名空间的会话 为了实现不同的Zookeeper业务之间的隔离,需要为每个业务分配一个独立的命名空间( NameSpace ),即指定一个Zookeeper的根路径

java 静态代理 JDK动态代理 Cglib动态代理

Deadly 提交于 2020-02-03 14:07:00
下面以一个简单的银行账户为例讲述讲述动态代理。 设计一个银行账户类,包含用户的账户余额,实现查询和更新余额功能 这个系统用了一段时间,有客户要求对账说账户余额给弄错了?因为上面没有存取款记录,最后银行不认账,客户收到了损失。银行为了避免这种现象再次发生,决定对这个系统进行修改,但是因为bankAccount太过复杂,希望在不修改bankAccount的情况下,增加日志功能。 静态代理 使用静态代理解决上面的问题。 银行要求所有模块都需要添加日志功能,这对苦逼的程序员来说真的是一个不小的工作量啊,这需要写多少个自定义的代理类???还有没有时间可以愉快的玩耍了! 动态代理 Java JDK提供了一种动态代理实现机制,不用为每一个类自己手动去编写一个代理类,它可以帮你自动生成代理类。 下面讲一下,上面用到的几个关键方法和接口: InvocationHandler接口: public interface InvocationHandler { public Object invoke(Object proxy,Method method,Object[] args) throws Throwable; } 参数说明: Object proxy:动态生成的代理类的实例 Method method:要调用的方法 Object[] args:方法调用时所需要的参数