精华内容
下载资源
问答
  • 这是我在书中看到的代码,代码中有把实例化静态内部。静态怎么可以实例化?为什么要这么做?import java.util.concurrent.*;import java.util.concurrent.locks.*;public class Consumerproducer {private ...

    这是我在书中看到的代码,代码中有把实例化静态内部类。静态类怎么可以实例化?为什么要这么做?

    import java.util.concurrent.*;

    import java.util.concurrent.locks.*;

    public class Consumerproducer {

    private static Buffer buffer = new Buffer();

    public static void main(String[] args) {

    ExecutorService executor = Executors.newFixedThreadPool(2);

    executor.execute(new Producertask());

    executor.execute(new ConsumerTask());

    }

    static class Producertask implements Runnable {

    public void run() {

    int i = 10;

    try {

    while (true) {

    System.out.println("Producer writes " + i);

    buffer.write(i++);

    Thread.sleep((int) (Math.random() * 10000));

    }

    } catch (InterruptedException ex) {

    ex.printStackTrace();

    }

    }

    }

    static class ConsumerTask implements Runnable {

    public void run() {

    try {

    while (true) {

    System.out.println("\t\tConsumer reads " + buffer.read());

    Thread.sleep((int) (Math.random() * 10000));

    }

    } catch (InterruptedException ex) {

    ex.printStackTrace();

    }

    }

    }

    private static class Buffer {

    private static final int CAPACITY = 1;

    private java.util.LinkedList queue =

    new java.util.LinkedList<>();

    private static Lock lock = new ReentrantLock();

    private static Condition notEmpty = lock.newCondition();

    private static Condition notFull = lock.newCondition();

    public void write(int value) {

    lock.lock();

    try {

    while (queue.size() == CAPACITY) {

    System.out.println("Wait for notFull condition");

    notFull.await();

    }

    展开全文
  • 抽象实例化吗

    2021-02-12 14:14:53
    抽象实例化吗?这个问题我想了一个晚上,看了好几篇别人的博客,但结果都各不相同,每个人有每个人的理解,后来我想明白了:抽象不能直接通过new去实例化一个对象,那它就是不能实例化,要获取抽象的对象, ...

    抽象类能实例化吗?

    这个问题我想了一个晚上,看了好几篇别人的博客,但结果都各不相同,每个人有每个人的理解,后来我想明白了:

    抽象类不能直接通过new去实例化一个对象,那它就是不能实例化,要获取抽象类的对象, 需要先用一个类继承抽象类,  然后去实例化子类。也可以用匿名内部类,在抽象类中创建一个匿名的子类,继承抽象类,通过特殊的语法实例化子类的对象 。(后面会细说)

    现在重点来了,要研究这个问题,前提是你要了解抽象类,万变不离其宗,我们从抽象类的根源谈起 , 深化对抽象类的理解。

    首先看这个例子:

    package com.my.animal;//动物类

    public classAnimal {

    String name;//名字

    String color;//颜色

    publicAnimal(String name,String color){this.name =name;this.color =color;

    }public voidrun(){

    System.out.println(name+"四条腿跑的很快!!!");

    }

    }//狗类继承动物类

    classDog extends Animal{publicDog(String name,String color){

    super(name,color);

    }

    }//鱼类继承动物类

    classFish extends Animal{publicFish(String name, String color) {

    super(name, color);

    }

    }classTest{public static voidmain(String[] args) {

    Dog dog= new Dog("哈巴狗","白色");

    dog.run();

    Fish fish= new Fish("锦鲤","红色");

    fish.run();

    }

    }

    运行结果:

    哈巴狗四条腿跑的很快!!!

    锦鲤四条腿跑的很快!!!

    是不是发现问题了,鱼怎么能用腿跑呢,难道是原始鱼?哈哈,开玩笑的,这个问题如何解决,估计大家马上想到了,在子类中重写父类的run方法不就行了,对,确实这样就可以解决,但是大家想过没有,我们是如何发现这个问题的?是不是编译运行之后才看到的,当然,也有大佬能不编译运行就能看到,不抬杠啊,意思是说有发现不了这个问题的风险,对别人可能无所谓,但对我们程序员来说,这种低级错误还是不犯的好,程序员应该有更高的追求,岂能在这被绊倒,我们要把这种风险降为零,那该如何做呢?不急,心急吃不了热豆腐,且看我慢慢分析:

    目前存在的问题:

    1.动物类的run方法描述的不正确

    2.没有强制要子类一定要重写父类的run方法

    解决方案:(抽象类的应用场景)

    我们在描述一类事物的时候,发现该种事物确实存在着某种行为,但是这种行为目前是不具体的,那么我们可以抽取这种行为的声明,但是不去实现该种行为,这时候这种行为我们称作为抽象的行为,我们就需要使用抽象类

    先看下面的例子:

    package com.my.animal;//动物类(抽象类)

    public abstract classAnimal {

    String name;//名字

    String color;//颜色//构造方法

    publicAnimal(String name,String color){this.name =name;this.color =color;

    }

    //非抽象方法

    public void eat(){

    System.out.println(name+"吃东西!!!");

    }//抽象方法

    public abstract voidrun();

    }classDog extends Animal{publicDog(String name,String color){

    super(name,color);

    }

    @Overridepublic voidrun() {

    System.out.println(name+"四条腿跑得快!!");

    }

    }classFish extends Animal{publicFish(String name, String color) {

    super(name, color);

    }

    @Overridepublic voidrun() {

    System.out.println(name+"摇摇尾巴游啊游!!");

    }

    }classTest{public static voidmain(String[] args) {

    Dog dog= new Dog("哈巴狗","白色");

    dog.run();

    Fish fish= new Fish("锦鲤","红色");

    fish.run();

    }

    }

    运行结果:

    哈巴狗四条腿跑得快!!

    锦鲤摇摇尾巴游啊游!!

    这个问题解决了,那还有一个问题就是:抽象类能实例化对象吗?

    看这个例子就知道了:

    public abstract classAnimal {

    String name;

    String color;publicAnimal(String name,String color){this.name =name;this.color =color;

    }public abstract voidrun();

    }classTest{public static voidmain(String[] args) {

    Animal a= newAnimal();

    a.run();

    }

    }

    运行结果:

    Error:(45, 20) java: com.my.animal.Animal是抽象的; 无法实例化

    抽象类注意的细节:

    1.如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象的函数。

    2.如果一个类出现了抽象的函数,那么该类也必须使用abstract修饰。

    3.如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。

    4.抽象类可以存在抽象方法,也可以存在非抽象方法,还可以不存在抽象方法,但是这样没任何意义,Java是不写废话的。

    5.抽象类是不能实例化对象的

    6.抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。

    疑问:为什么抽象类不能实例化对象?

    因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象类的对象调用抽象方法是没有任何意义的。

    疑问排解了,故事结束了?不,学海本无底,我们来点扩展,就是开头提到的如何用匿名内部类去实例化子类对象。

    看下面的例子:

    package Practice_Anything;public abstract classJava_Abstract2 {public voida(){

    System.out.println("我是抽象类中的一个非抽象方法");

    }public staticJava_Abstract2 newIntences(){return newJava_Abstract2(){

    };

    }

    }classTest2{public static voidmain(String[] args) {

    Java_Abstract2 java_abstract2=Java_Abstract2.newIntences();

    java_abstract2.a();

    }

    }

    运行结果:

    我是抽象类中的一个非抽象方法

    这个故事到这就结束了,但是学习还没有停止,比如接口也是一种抽象类型,是抽象方法的集合,由此,我们是不是该联想到学习接口了呢?哈哈,学海本无底,前行莫彷徨!

    此篇为本人原创,花了大概半天时间,找了不知多少相关资料整合而成,如若对你有用,记得推荐,如若哪有不当,感谢指正!

    本文已独家授权给脚本之家(jb51net)公众号独家发布

    展开全文
  • java中的接口能够被实例化吗写在前面的话学习java这么久了,好像已经习惯了new对象,平时new对象主角是(class)。乍一听对接口(interface)实例化,这这这可能吗,怕不是疯了!下文首先通过在IDEA中编写代码演示说明...

    java中的接口能够被实例化吗

    写在前面的话

    学习java这么久了,好像已经习惯了new对象,平时new对象主角是类(class)。乍一听对接口(interface)实例化,这这这可能吗,怕不是疯了!下文首先通过在IDEA中编写代码演示说明,然后分析怎样操作才能对接口进行实例化。希望博主的博文能够对java学习道路上的你有所帮助,喜欢的话点赞留言收藏哦~

    1、在IDEA中进行代码演示

    直接用平时new类(class)对象的方式对接口进行操作,达不到效果,IDEA提示:Runnable' is abstract; cannot be instantiat(接口不能被实例化)!演示图如下:

    a5570ecfe5f320dba3b9f8d8ccc730e3.gif

    难道接口就不能通过new进行实例化了吗?其实不然,接口可以进行实例化,只需要在new后将接口中未实现的方法进行实现就好,这种做法其实是匿名内部类的做法,本质上讲还是类的实例化。具体演示如下:

    9080c86ac940768bd7fbf7ca1a8f4baa.gif

    上述演示表示了如何对接口进行new,从而创建实例!写到这里基本主题已经结束了,但是注意到上图

    ee16cb293f6ac86dcc089c8d57a97895.png中new Runnable()是灰色的,IDEA提示:需要使用lambda表达式来代替匿名内部类。

    cf76a6ac6c1f48b644c0a3e6b2645969.png

    下面使用lambda表达式进行改写,演示如下:

    399dd8dd74b55307ba993631fd6d58d1.gif

    2、总结

    java中接口可以通过在new对象的时候,以匿名内部类(lambda表达式)的方式实现未实现的方法,从而来达到new对象的效果!

    时间: 2019-08-25

    1. request对象 是javax.servlet.HttpServletRequest接口的实例化 2. response对象 是javax.servlet.HttpServletResponse接口的实例化 3. session 对象 是javax.servlet.HttpSession接口的实例化 4. application对象 是javax.servlet.ServletContext接口的实例化 以上是常用的对象 5. pageContext对象 是javax.servlet.j

    3161648f6a7133651095ea9689059321.png

    1. 调用父类构造方法是真的,但是根本没有创建父类对象,只不过是调用父类构造方法来初始化属性. 如果说调用父类构造方法就等于创建父类对象,那就真的无稽之谈. new指令开辟空间,用于存放对象的各个属/性引用等,反编译字节码你会发现只有一个new指令,所以开辟的是一块空间,一块空间就放一个对象. 然后,子类调用父类的属性,方法啥的,那并不是一个实例化的对象. 在字节码中子类会有个u2类型的父类索引,属于CONSTANT_Class_info类型,通过CONSTANT_Class_info的描述可以

    1 - 输入校验 编码原则:针对各种语言本身的保留字符,做到数据与代码相分离. 1.1 SQL 注入防范 严重性高,可能性低. (1) 参数校验,拦截非法参数(推荐白名单): public String sanitizeUser(String username) { return Pattern.matches("[A-Za-z0-9_]+", username) ? username : "unauthorized user"; } (2) 使用预编译: Stri

    这里讨论list.set.map的排序,包括按照map的value进行排序. 1)list排序 list排序可以直接采用Collections的sort方法,也可以使用Arrays的sort方法,归根结底Collections就是调用Arrays的sort方法. public static void sort(List list, Comparator super T> c) { Object[] a = list.toArray(); Arrays.

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁.根据的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域. 1.程序计数器(线程私有) 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码

    一.什么时候会加载类? 使用到类中的内容时加载:有三种情况 1.创建对象:new StaticCode(); 2.使用类中的静态成员:StaticCode.num=9;  StaticCode.show(); 3.在命令行中运行:java StaticCodeDemo 二.类所有内容加载顺序和内存中的存放位置 利用语句进行分析: 1.Person p=new Person("zhangsan",20); 该句话所做的事情: 1.在栈内存中,开辟main函数的空间,建立main函数的变量

    一,"=="与equals() 运行以下代码,如何解释其输出结果? public class StringPool { public static void main(String args[]) { String s0="Hello"; String s1="Hello"; String s2="He"+"llo"; System.out.println(s0==s1);//true System.out

    2591ffa3ae0ec79c3d1fa377daa1b575.png

    看书的时候被一段代码能凌乱啦,代码是这样的: package 继承; abstract class People { public String tag = "疯狂Java讲义"; //① public String name = "Parent"; String getName(){ return name; } } class Student extends People { //定义一个私有的tag实例变量来隐藏父类的tag实例变量 String tag =

    0ab1b4b7e65a0a335e4335025538ed08.png

    前言 好久没写Web程序了,这一段时间看了看原来师弟们做的一些程序,感觉还是有很多不足,一个比较典型的例子就是分页查询的实现,正好借着这个机会简单记录一下. 分析 使用场景 "分页"在Web程序里非常常见,比如我们在页面上经常要展示一些列表信息,通常情况下,如果数据过多,我们在一屏上难以罗列出所有的记录,而且很多时候我们可能只是看看比较Top的一些记录,因此,在这种情况下使用"分页"查询只展示部分数据是比较合适的. 实现原理 从数据库角度上来说,分页查询实现的难度

    一.概念 生产者与消费者问题是一个金典的多线程协作的问题.生产者负责生产产品,并将产品存放到仓库:消费者从仓库中获取产品并消费.当仓库满时,生产者必须停止生产,直到仓库有位置存放产品:当仓库空时,消费者必须停止消费,直到仓库中有产品. 解决生产者/消费者问题主要用到如下几个技术:1.用线程模拟生产者,在run方法中不断地往仓库中存放产品.2.用线程模拟消费者,在run方法中不断地从仓库中获取产品.3  . 仓库类保存产品,当产品数量为0时,调用wait方法,使得当前消费者线程进入等待状态,当有新

    展开全文
  • 注解方式实例化Java类

    2021-02-27 20:21:09
    context:component-scan标签:Sprng容器通过context:component-scan标签扫描其base-package标签属性值指定的包及其子包内的所有的实例化被@Component、@Repository、@Service或@Controller等注解所修饰的。...

    context:component-scan标签:

    Sprng容器通过context:component-scan标签扫描其base-package标签属性值指定的包及其子包内的所有的类并实例化被@Component、@Repository、@Service或@Controller等注解所修饰的类。

    @Component:基本注解

    @Respository:持久层(一般为dao层)注解

    @Service:服务层或业务层(一般为service层)注解

    @Controller:控制层(一般为controller层)注解

    默认情况下Spring依据默认命名策略为通过注解实例化的对象命名:类名第一个字母小写.也可以在注解中通过@Component、@Repository、@Service或@Controller注解的value属性标识名称。

    bean内属性赋值:

    Sprng容器通过context:component-scan标签扫描时还会自动实例化AutowiredAnnotationBeanPostProcessor 类, 该实例对象可以自动装配具有 @Autowired 和@Resource 或@Inject注解的属性。

    @Autowired

    1、成员变量(不考虑访问权限)、构造函数或setter方法都可以使用@Autowired注解

    2、默认情况下@Autowired 注解依据类型自动为成员变量赋值,当 IOC 容器里存在多个类型相同的 Bean 对象时就会依据成员变量名进行赋值,此时要求变量名必须是多个Bean对象中的一个,否则就会出现异常, 该异常可以通过在 @Qualifier 注解指定实例名的方式解决;

    3、默认情况下,通过@Authwired 注解为成员变量赋值时,如果Spring 找不到匹配的 Bean为成员变量赋值则会抛出异常;如果该成员变量允许不被设置, 可以设置 @Authwired 注解的 required 属性为 false;

    操作如下所示:

    //创建一个类

    packagecom.zzj.vo;importjava.util.Date;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.stereotype.Component;//使用Component基本注解

    @Componentpublic classSchool {//bean内属性赋值

    @Autowired

    //从多个实现类中选择需要的,如果不加当有多个实现类时会报错

    @Qualifier("b")privateDate birth;publicDate getBirth() {returnbirth;

    }public voidsetBirth(Date birth) {this.birth =birth;

    }

    }

    //测试类

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");

    System.out.println(context.getBean(School.class).getBirth());

    注意:

    1、使用context:component-scan标签需要添加spring-aop-4.3.10.RELEASE.jar包

    2、base-package标签属性属性值:

    a、Spring 容器将会扫描该属性值指定包及其子包中的所有类;

    b、该属性值支持*通配符,例如“com.lq.*.imp”表示扫描诸如com.lq.book.imp包及其子包中的类;

    c、当需要扫描多个包时, 使用逗号分隔;

    d、resource-pattern标签属性可以指定Spring容器仅扫描特定的类而非基包下的所有类,比如resource-pattern="/*.class"表示只扫描基包下的类,基包的子包不会被扫描。

    context:component-scan子标签:

    1、 子标签设定Spring容器扫描时仅扫描哪些expression指定的类,该子标签需要和context:component-scan父标签中的use-default-filters属性一起使用;

    2、子标签设定Spring容器扫描时不扫描哪些expression指定的类;

    展开全文
  • 我们可以通过两种方式实例化成员内部内调用在外调用内部阶级规则外部(包含内部)可以在其代码内实例化任意数量的内部对象。如果内部是public且包含,那么其他一些不相关的中的代码也可以创建...
  • Java中抽象真的不能实例化么?在学习的过程中,发现了一个问题,抽象在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的。这样就把我搞糊涂了,既然有构造...
  • 创建一个用来把泛型实例化结果关联起来的工厂,工厂不关心具体的实例化过程,它只负责将实例化结果赋值给泛型。工厂的构造方法是一个泛型方法,泛型的边界是接口Creator,同时构造方法的参数是实现了...
  • public class Example {void idea() {}public static void main(String args[]) {new Example().idea();...}}简而言之:首先,static中可以创建实例,但不能访问本的某个已有实例(除非传递进来的)其次静态...
  • 小编典典使用反射时,您会发现该内部的构造函数将外部实例作为附加参数(总是第一个)。例:import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;public class ...
  • 泛型java 实例化

    2021-03-06 18:22:36
    // 通过子类实例化对象 System.out.println("Length Of String : " + i.getVar().length()); } } // Java泛型接口 interface Info25 { // 在接口上定义泛型 public T getVar(); // 定义抽象方法,抽象方法的返回值...
  • 我们在写代码过程中,常常会定义一些工具,这些的所有方法都是静态的,所以这些实例化是没有必要的,那么如何保证这些不被实例化呢 方法1:将该定义成抽象 这种方式虽然能避免该不能被创建实例,...
  • 摘要:在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。...本文试图对JVM执行初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象...
  • 泛型对象可以实例化吗?不可以,T t=new T()是不可以的,编译器会报错。由于泛型擦除,编译器在编译时无法确定泛型所对应的真实类型解决方法使用反射新建实例Type superclass = getClass().getGenericSuperclass();...
  • 问题我正在寻找一个问题:Instantiate an class from its string name,它描述了如何在拥有名称时实例化一个。有没有办法在Java中做到这一点?我将拥有包名和类名,我需要能够创建具有该特定名称的对象。#1 热门...
  • Java关于抽象能否被实例化的问题

    千次阅读 2021-02-27 12:43:48
    我对抽象能否被实例化产生疑问始于我看到一句话说:子类实例化会先实例化父类。而且,自己也知道,抽象作为父类,其子类是能调用他的属性和已实现方法的。这证明抽象父类在内存是有一定空间的。(百度百科说:...
  • Java中 接口可以实例化吗? 结论 接口不可以实例化,但是接口变量可以指向该接口实现的对象; 注意点:该接口变量不能使用实现中有、接口中没有的方法; 原因 首先:接口可以看做是特殊的抽象,其方法都是...
  • java泛型实例化

    2021-02-12 14:07:54
    java的泛型怎样生成实例对象呢?按照以往的经验,我们很容易这样实现:public static T create(T t) {t = new T();return t;}此时,由于T的具体类型我们无法获得,所以new T()是无法通过编译的。换一种思路,我们...
  • java数组实例化

    千次阅读 2021-02-12 15:25:28
    publicclassok{publicstaticvoidmain(String[]args){String[]... } } } } 改了过后运行: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at ok.main(ok.java:16) 1.干瘪瘪的馒头:1个 展开
  • 有三个与此主题相关的术语:声明,初始化和实例化.从后到前工作.实例化这是为对象分配内存的时候.这就是新关键字正在做的事情.从new关键字返回对创建的对象的引用.初始化这是将值放入已分配的内存中的时间.这是使用...
  • 内部实例化如果内部未声明为static,在实例化时首先需要new一个外部的对象。并通过p.new Inner()的方式new 内部,表明这个内部指向该外部。内部的class类型为:Parent.Inner,而不是p.Inner,这个...
  • /*** 枚举** @Author zjl* @Date 2018/06/27*/public enum EnumType {All_TYPE("所有类型", 0),TYPE_ONE("类型一", 1),TYPE_TOW("类型二", 2),private final String typeName;private final in...
  • 关于java:无法实例化类型List

    千次阅读 2021-03-09 01:39:09
    本问题已经有最佳答案,请猛点这里访问。我有以下代码:List product = new List();... 作为一个从c#转到java的开发人员,尚不立即知道list是这种语言的接口。@SouthShoreAK,如果您阅读文档:)使用列表之前需要阅读...
  • 什么是java实例化

    千次阅读 2021-02-12 11:12:21
    java实例化就是使用new关键字创建一个对象的过程,例如“new Persion()”就代表实例化了一个Persion对象,其中Persion末尾的括号代表立即调用Persion的构造函数来进行初始化的操作。,其实,它包含了四个动作。...
  • 初始化过程中或初始化完毕后,根据具体情况才会去对进行实例化。 抛砖引玉 下面先来看一个例子吧 先来看父类 Father.java public class Father { private int i = test(); static { Syste
  • java中使用new实例化

    2021-02-12 21:25:15
    java里我们经常会创建具体的对象,但在名称上我们不这么说,而是把它叫做实例化实例化是通过new关键字来实现的,在方法的形式上有两种。在使用的注意上,我们分别通过运算符、创建对象步骤、调用的父类三个方面...
  • Java实例化的几种方法总结Java创建有四种方式:(1)用new 语句创建对象,这是最常用的创建对象方法。(2)运用反射手段,调用Java.lang.Class或者java.lang.reflect.Constructor的newInstance()实例方法。(3)调用对象...
  • 好吧,我来试试看,看答案能不能够让你满意。先通俗的分析下,我们把看作是一个房子。房子里面有家具,桌椅板凳之的,...非静态变量叫做实例变量,它开始于实例的创建,结束语实例的消亡。静态变量被所...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,252,874
精华内容 501,149
关键字:

java类必须实例化吗

java 订阅