类对象

Java--内部类

匿名 (未验证) 提交于 2019-12-02 21:53:52
定义: 可以将一个类的定义放在另一个类的定义内部,这就是内部类。 举个栗子: public class A { public class B { } }; 为什么要用内部类? 在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。 栗子: public interface Father { } public interface Mother { } public class Son implements Father , Mother { } public class Daughter implements Father { class Mother_ implements Mother { } } 有什么特性呢? 1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。 2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。 3

【java基础】第11天――接口、多态

匿名 (未验证) 提交于 2019-12-02 21:53:52
今日内容介绍 1、接口 2、多态 =======================第一节课开始============================================= * A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。 请记住:一切事物均有功能,即一切事物均有接口。 * A: 接口的定义 与定义类的class不同,接口定义时需要使用interface关键字。 定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。 * B : 定义格式 public interface 接口名 { 抽象方法1; 抽象方法2; 抽象方法3; } * C: 定义步骤 使用interface代替了原来的class,其他步骤与定义类相同: 接口中的方法均为公共访问的抽象方法 接口中无法定义普通的成员变量 * A: 类与接口的关系 类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。 其他类(实现类)实现接口后,就相当于声明:

什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?

岁酱吖の 提交于 2019-12-02 20:38:35
所谓懒加载(lazy)就是延时加载,延迟加载。 什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗, 我们让数据在需要的时候才进行加载,这时我们就用到了懒加载。 比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为 false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来。但是实际上有时候只是需要用到部门的信息,不需要用到 员工的信息,这时员工po的加载就等于浪费资源。如果lazy设置为true,那么只有当你访问部门po的员工信息时候才回去加载员工的po的信息。 hibernate3.0中lazy有三个值,true,false,proxy,默认的是lazy="proxy". 具体设置成什么要看你的需求,并不是说哪个设置就是最好的。 假如在student对象中包含一个head对象 如果你确定在用student对象的时候就要用到head对象里的属性,那你就设置立即加载,因为设置立即加载那么在查询student的同时就会查询 student的head,hibernate就会在查询的时候关联两张表从而生成的sql就可能只有一条。而如果你设置的是延迟加载,那么肯定会要生成 1+N条sql语句

Hibernate延迟加载机制

别等时光非礼了梦想. 提交于 2019-12-02 20:38:18
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。 A、实体对象的延迟加载: 如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示: <hibernate-mapping> <class name=”com.neusoft.entity.User” table=”user” lazy=”true”> …… </class> </hibernate-mapping> 通过将class的lazy属性设置为true,来开启实体的延迟加载特性。如果我们运行下面的代码: User user=(User)session.load(User.class,”1”);(1) System.out.println(user.getName());(2) 当运行到(1)处时,Hibernate并没有发起对数据的查询,如果我们此时通过一些调试工具(比如JBuilder2005的Debug工具),观察此时user对象的内存快照,我们会惊奇的发现,此时返回的可能是User$EnhancerByCGLIB$$bede8986类型的对象

java获取类的3种方式

非 Y 不嫁゛ 提交于 2019-12-02 17:03:58
1、Class.forName("全类名"):将字节吗文件加载进内存,返回Class对象,多用于配指文件,将类名定义在配置文件中,便于利用java的反射机制生成类对象,加载类。 //加载一个用户实体类UserBean Class c1 = Class.forName("com.test.UserBean"); 2、类名.class:通过类名的属性class获取,多用于传递参数。 Class c2 = UserBean.class; 3、对象.getClass();:多用于对象获取字节码的方式。 UserBean user = new UserBean(); Class c3 = user.getClass(); 对于三种方式获取到的类对象都指向堆内存中同一个地址,所以三种方式获取的类对象都是同一个,根据实际应用环境选择使用。 来源: https://www.cnblogs.com/hpqbh/p/11756225.html

动态代理jdk和cglib的用法

久未见 提交于 2019-12-02 16:06:56
一:JDK动态代理 JDK 动态代理所用到的代理类在程序调用到 代理类对象时才由JVM真正创建 ,JVM根据传进来的 业务实现类对象 以及 方法名 ,动态地创建了一个代理类的class文件并被字节码引擎执行,然后通过该代理类对象进行方法调用。 案例 1、 定义业务接口以及实现类 package com.yjc.jdkproxy; public interface DoSomeService { void doSome(); } ------------------------------------------- package com.yjc.jdkproxy; public class DoSomeServiceImpl implements DoSomeService { @Override public void doSome() { System.out.println("doSome++++++++++++++++++=="); } } 2.调用管理接口InvocationHandler 创建动态代理类 package com.yjc.jdkproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DoSomeHandler

Spring——代理实现AOP

懵懂的女人 提交于 2019-12-02 16:03:10
一、静态代理实现   1.接口(抽象主题)       2.接口的实现类(真实主题)      3.代理类(代理主题)       4.测试类:      ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); ProxySubject proxySubject =(ProxySubject) context.getBean("proxySubject"); proxySubject.doSome(); 二、JDK动态代理    JDK动态代理所用到的代理类在 程序调用到代理类对象时才由JVM真正创建 ,JVM根据传进来的 业务实现类对象 以及 方法名 ,动态地创建了一个代理类的class文件并被字节码引擎执行,然后通过该代理类对象进行方法调用。    1.抽象主题,真实主题与上面一致    2.动态代理类 package com.cmy.handler; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class DoSomeBeanFactory implements

动态代理(jdk&cglib)的用法

若如初见. 提交于 2019-12-02 16:01:25
什么是代理模式(Proxy) 定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用 在代理模式中,是需要代理对象和目标对象实现同一个接口 为什么要用代理 最最最主要的原因就是,在不改变目标对象方法的情况下对方法进行增强,比如,我们希望对方法的调用增加日志记录,或者对方法的调用进行拦截,等等... 一:JDK动态代理 JDK 动态代理所用到的代理类在程序调用到 代理类对象时才由JVM真正创建 ,JVM根据传进来的 业务实现类对象 以及 方法名 ,动态地创建了一个代理类的class文件并被字节码引擎执行,然后通过该代理类对象进行方法调用。 案例 1、 定义业务接口以及实现类 package com.yjc.jdkproxy; public interface DoSomeService { void doSome(); } ------------------------------------------- package com.yjc.jdkproxy; public class DoSomeServiceImpl implements DoSomeService { @Override public void doSome() { System.out.println("doSome++++++++++++++++++=="); } } 2

IOC和AOP扩展

与世无争的帅哥 提交于 2019-12-02 15:37:12
使用多种方式实现Ioc   使用构造注入          构造注入是一种高内聚的体现,特别是针对有些属性需要在对象在创建时候赋值,且后续不允许修改(不提供 setter方法)       实例:        Greeting类:                配置applicationContext.xml文件:                测试:                结果:                 注意点:        一个 <constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。当构造方法的参数出现混淆,无法区分时,可以通过<constructor-arg>元素的index属性指定该参数的位置索引,位置从0开始。<constructor-arg>元素还提供了type属性用来指定参数的类型,避免字符串和基本数据类型的混淆。            构造注入的时效性好,在对象实例化就得到所依赖的对象,便于在对象的初始化方法中使用依赖对象;但受限于方法重载的形式,使用灵活性不足。设值注入使用灵活,但时效性不足,并且大量的 setter访问器增加了类的复杂性。Spring并不倾向于某种注入方式,用户应该根据实际情况进行合理的选择。   使用p命名空间注入 p命名空间的特点是使用属性而不是子元素的形式配置Bean的属性

java知识基础篇(详细版)

自古美人都是妖i 提交于 2019-12-02 14:59:12
本文章为Java知识的基础篇,为Java知识点总结的前序部分。 1.java概述: 1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人开始开发名称为 Oak的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java; 2.Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发; JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础; JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序; 3.JDK: Java Development Kit,java的开发和运行环境,java的开发工具和jre。 4.JRE: Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。 5.配置环境变量: 是 java中 jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 6.环境变量的配置: 1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk