精华内容
下载资源
问答
  • Java中如何获得一个对象对应及Class的简单理解 前言 在之前的学习中,所用的编程语言主要是Python,最近开始学习Java,熟悉Python的同学应该会知道在Python中有一个函数type(),通过这个函数可以非常...

    Java中如何获得一个对象所对应的类及Class类的简单理解

    前言

    在之前的学习中,所用的编程语言主要是Python,最近开始学习Java,熟悉Python的同学应该会知道在Python中有一个函数type(),通过这个函数可以非常方便地获得一个变量的类型。那么在Java中可不可以实现类似的功能呢?答案当然是可以的,一个比较简单的方法就是利用Java中Class类来实现。

    利用Class类的方法获得一个对象所属于的类

    在这里先给出一个例子:

    List<Integer> listTest = new ArrayList<>();
    System.out.println(listTest.getClass().getName());
    

    运行这段代码会输出:

    java.util.ArrayList
    

    在这一段代码中,新建了一个ArrayList类型的实例listTest,在其后的一行代码中,用.getclass()方法获得了listTest变量所属于的类,并再用.getName()将这个类的名称输出出来。
    同时,也可以用.toString()将完整的信息打印出来:

    System.out.println(listTest.getClass().toString());
    

    结果为

    class java.util.ArrayList
    

    可以看到,用.getClass()方法可以很方便地获得我们想要知道的对象变量所对应的类的名称。
    而以上是用于实例的获取其类的类型的方法,与之类似的还有.class()方法,这个方法是针对类的,如:

    System.out.println(ArrayList.class.getName());
    

    输出为:

    java.util.ArrayList
    

    关于Class类的一些理解

    在上面的例子中,我们看到Class类有一些非常方便的应用,所以可以来简单地了解以下Class类的内容。

    java是一门比较纯粹的面向对象的语言,在这样一门语言里,一切皆为对象。当然还是有着一些例外,比如从开发者的角度看静态成员和普通数据类型就不属于对象,静态成员只属于某个类,而不属于对象,而普通数据类型是因为处于对性能的考虑,因为处理对象需要额外的系统开销,所以颗将基本数据类型当作对象,就会给语言性能带来负面影响,因此,在Java中基本数据类型是不作为对象来使用的,不过,在需要的时候可以通过方便的装箱(boxing)与开箱(unboxing)来实现基本数据类型与对象之间的转换。

    当然,既然上面说了是从开发者的角度看,肯定对应着其它的角度,比如若在JVM的视角,会将所有的原始类型都当作对象处理,但是会为原始类型创建非常轻量级的对象,相比于其装箱的包装类的功能要少得多,但是会有很多优化。而对于静态成员,就可以通过Class类来进行理解。

    那么,既然Java中,一切皆为对象,那么在程序里的类本身是不是对象呢?答案为是的,在Java中有这样专门的一个类java.lang.Class,在程序中所写的每一个类都既有着自己的对象,同时它自己本身也是Class类的对象。
    在Java中,程序运行的期间,Java的运行时系统会始终为所有的对象维护一个被称为运行时的类型标识,这个信息跟踪着每个对象所属的类,虚拟机则利用女性是类型信息来选择相应的方法执行,而保存这些信息的类就是Class类。而在之前我们的例子中的的.getClass()方法返回的就是这样一个Class类型的实例,获得Class类的方法主要有以下三种:

    1. Object类中的getClass()方法

    2. Class类中的forName()方法,例:Class cl = Class.forName(className); 输入参数为雷鸣,获得类名对应的Class对象。

    3. 如果T是任意的Java类型,则T.class返回匹配的类对象。

    其中的1、3条即为本文开始时的两个例子。

    在这里,需要注意的一点时,一个Class对象实际上上表示的是一个类型,而这个类型未必一定是一种类,如int不是类,但int.class是一个Class类型的对象。

    Class类还有其它一些比较有用的地方,比如,虚拟机为每个类型管理一个Class对象,因此,可以利用==运算符实现两个类对象比较的操作,如:

    if (e.getClass() == Employee.class)...
    

    还有一个很有用的方法newInstance(),可以用来动态地创建一个类的实例。例如:

    e.getClass().newInstance();
    

    这个语句创建了一个与e具有相同类的类型的实例。newInstance方法调用默认的构造器(没有参数的构造器)初始化新创建的对象。如果这个类没有默认的构造器,就会抛出一个异常。

    forNamenewInstance配合使用,可以根据存储在字符串中的类名创建一个对象。

    String s = "java.util.Random";
    Object m = Class.forName(s).newInstance;
    

    同时,还需要知道,Class类的构造函数为私有函数,即我们无法像定义普通类的实例那样,用new的方法来构造Class的实例,若要获得Class的实例可以通过上面介绍的三种方法。

    展开全文
  • 合并数组或者对象在数组或对象前面加…,是es6的新写法,然后数组的map方法会返回数组. var obj1 = [{ "id": 980550455852, "model": "XQG70-S1208FW", "color": "白", "invStatusName": "正品", ...

    合并数组或者对象在数组或对象前面加…,是es6的新写法,然后数组的map方法会返回数组.

    var obj1 = [{
      "id": 980550455852,
      "model": "XQG70-S1208FW",
      "color": "白",
      "invStatusName": "正品",
      "bactualQty": 10947,
      "brealyQty": 11000,
      "bavailQty": 53
    }, {
      "id": 980550566221,
      "model": "XQB70-C3006",
      "color": "灰",
      "invStatusName": "正品",
      "bactualQty": 11,
      "brealyQty": 6,
      "bavailQty": -5
    }];
    
    var obj2 = [{
      "price": "6666"
    }, {
      "price": "8888"
    }];
    var obj = obj1.map((item,index) => {
        return {...item, ...obj2[index]};
    });
    console.log(obj);
    

    在这里插入图片描述
    es5方法

    function assign(target, args) {
        if (target === null) return;
        if (Object.assign) {
            return Object.assign(target, args);
        } else {
            var _ = Object(target);
            for (var j = 1; j < arguments.length; j++) {
                var source = arguments[j];
                if (source) {
                    for (var key in source) {
                        if (Object.prototype.hasOwnProperty.call(source, key)) {
                            _[key] = source[key];
                        }
                    }
                }
            }
            return _;
        }
    };
    
    var obj = obj1.map(function(o,index){
        return assign(o,obj2[index]);
    })
    console.log(obj);
    
    展开全文
  • MAP实现一个key,对应多个Value值。

    万次阅读 2018-08-16 23:10:19
    最近遇到一个对我来说比较棘手的问题,通过java代码实现读取Execle中的数据存到MAP&lt;String,List&lt;Object(实体中)&gt;&gt;,虽然不难,但是很久不写,感觉比较生疏,因此将写好的代码分享给...

    最近遇到一个对我来说比较棘手的问题,通过java代码实现读取Execle中的数据存到MAP<String,List<Object(实体类中)>>,虽然不难,但是很久不写,感觉比较生疏,因此将写好的代码分享给大家,以供参考,如有什么问题和好的建议热烈欢迎评论区留言,共同探讨,共同进步。

    public static Map<String,List<ExecleEntity>> read(String path) {
            File file = new File(path);
            InputStream inputStream = null;
            Workbook workbook = null;        
            //List<String> list1 = new ArrayList<String>();
            String str = "";
            try {
                //判断文件是否是Execle
                inputStream = new FileInputStream(file);
                //判断Excel的版本
                workbook = WorkbookFactory.create(inputStream);
                inputStream.close();
                //工作表对象
                Sheet sheet = workbook.getSheetAt(0);
                //总行数
                int rowLength = sheet.getLastRowNum();
                //工作表的列
                Row row = sheet.getRow(0);
                //总列数
                int colLength = row.getLastCellNum();
                //得到指定的单元格
                Cell cell = row.getCell(0);
                //得到单元格样式
                CellStyle cellStyle = cell.getCellStyle(); 
                //new HashMap将读取execle循环出的值存进Map中。
                map = new HashMap<String,List<ExecleEntity>>();            
               //根据行读取列数据,存到Map中。                                                                                                                                                 for (int i = 2; i < rowLength; i++) {
                    row = sheet.getRow(i);
                    ExecleEntity entity = new ExecleEntity();    
                        entity.setTestCase(row.getCell(0).getStringCellValue());
                        entity.setType(row.getCell(1).getStringCellValue());
                        entity.setElement(row.getCell(2).getStringCellValue());
                        entity.setAction(row.getCell(3).getStringCellValue());
                        entity.setText(row.getCell(4).getStringCellValue());
                        entity.setType1(row.getCell(5).getStringCellValue());
                        entity.setElement1(row.getCell(6).getStringCellValue());
                        entity.setAction1(row.getCell(7).getStringCellValue());
                        entity.setText1(row.getCell(8).getStringCellValue());
                        entity.setExpectValuel(row.getCell(9).getStringCellValue());                    
                    //如果key在MAP中存在,将value值set进map中。
                    if(map.containsKey(row.getCell(0).getStringCellValue())) {
                        List<ExecleEntity> list = map.get(row.getCell(0).getStringCellValue());
                        list.add(entity);
                        map.put(""+row.getCell(0).getStringCellValue()+"", list);
                    }else {
                        List<ExecleEntity> list = new ArrayList<ExecleEntity>();
                        list.add(entity);
                        map.put(""+row.getCell(0).getStringCellValue()+"", list);
                    }                
                  }          
                } catch (Exception e) {
                e.printStackTrace();
            }
            return map;
        } 

    展开全文
  • 一、前台传递不同不同对象 ...二、同一类多个对象集合 方法1、Json方式 方法2、新建一个类,该中属性为重复对象的集合 方法3、多个对象在前台jsp的input控件中name值该是什么就是什么,直接采用form表单提交

    spring mvc不仅可以像struts2一样获取jsp传过来的属性值,连js的都能直接获取 前提是,后台的属性和前台同名即可


    一、前台传递不同类不同对象

    1、属性名不同,可直接封装进controller方法的对象参数(经验证)

    2、属性名有重复,可在重复的类中设置一个值类型,后台再去将值类型值赋值给实例变量(经验证)


    二、同一类多个对象集合

    方法1、Json方式

    方法2、新建一个类,该类中属性为重复对象类的集合

    方法3、多个对象在前台jsp的input控件中name值和实体对象的属性名相同,直接采用form表单提交或ajax方式提交。后台controller方法参数中不要带这些name对应的参数,直接使用request.getParameterValues("");进行获取,获取到String数组后,遍历并封装进对象。

    展开全文
  • 一、前台传递不同不同对象 ...二、同一类多个对象集合 方法1、Json方式 方法2、新建一个类,该中属性为重复对象的集合 方法3、多个对象在前台jsp的input控件中name值该是什么就是什么。后台controller
  • 使用一个数组储存多个对象的思路

    万次阅读 2018-02-06 19:18:48
    思路 对象和数组;数组中存的元素时对象,然后根据for循环...3.通过输入添加数组的元素,必须要用到for循环,因为要存的是多个对象,所以在for循环中new实例化对象student,每一个i对应一个对象 4.那么就需要对每一个
  • Java对象 详解(

    万次阅读 多人点赞 2016-10-06 20:48:02
    、面向对象简述面向对象种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计...
  • 理论我就不废话了,直接看代码吧。使用的是fastjson-...然后就是反过来,把复杂的json字符串转换成对应的嵌套的Java对象。 先上工具。如下。 package com.lxk.json; import com.alibaba.fastjson.JSON; ...
  • 要实现1个key对应多个value,可以用apach提供的MultiValueMap import org.apache.commons.collections.map.MultiValueMap; import java.util.Collection; public class TestMain {  public static void main...
  • 在用django 连接数据库 用如下命令 创建...SQL SERVER删除列,报错."由于一个多个对象访问此列,ALTER TABLE DROP COLUMN ... 失败" 只需要删除后 对应列约束 再次运行  python manage.py migrate 即可
  • 1、一个实现实现多个接口 例如:serviceImpl implements Interface1,Interface2 在controller中 @AutowiredInterface1 只能调用Interface1接口的方法 总结,注入单个接口,只能调用对应的接口方法 2、一个...
  • 今天我想查看一个方法被其它那些方法对象调用时,使用alt+7或者alt+f7都不好使,但使用idea对应的菜单栏工具肯定好使。 首先,在万不得已的时候,我们还是可以使用鼠标右键 --》 Find in Path在项目中全局搜索。...
  • laravel多态关联(一张表对应多个一对多的关系)
  • 作为C语言的超集,面向对象成为Objective-C与C语言的最大区别,因此,对象是Objective-C中最重要的部分之。...谁都知道,所有的对象都是由其对应实例化而来,殊不知本身也是对象,先不要对这句话感到惊
  • 关于多个线程同时调用单例模式的对象,该对象中方法的局部变量是否会受多个线程的影响 对于那些会以多线程运行的单例,例如Web应用中的Servlet,每个方法中对局部变量的操作都是在...多个线程应该是调用的同一个对象
  • Python同时遍历多个列表一一对应

    千次阅读 2019-09-06 09:09:07
    Python在编程时常常需要的for循环遍历list,最常用的是单个list遍历,但是,有时遍历一个list并不能满足我们的需求,在一些特殊的场合,我们可能会需要遍历两个甚至多个列表;例如,有两个列表,第一个列表存放的是...
  • jsp中9内置对象与servlet对应关系及四作用域

    万次阅读 多人点赞 2014-04-10 20:46:27
    参考:  《jsp&servlet学习笔记.第2版.林信良》 《JSR-245 JavaServer Pages 2.2 Maintenance Release ...转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest
  • springboot实现将配置文件的属性转换成一个对应的pojo对象的属性
  • 返回的是一个List这样的类型,你可以另外创建一个DTO然后通过循环,把Object[]中的每一个值,与dto中的字段对应,组成一个List的对象,例如: People , Card 一个人和身份证 People:id ,name, age;  Card:...
  • 新手小白学JAVA 面向对象 对象 封装

    万次阅读 多人点赞 2021-05-06 15:58:57
    面向对象其实是种编程思想,通过它可以把生活中复杂的事情变得简单化,从原来的执行者变成了指挥者。 面向对象是基于面向过程而言的。 面向过程强调的是过程,比如: 打开冰箱门 2. 把大象放进去 3. 关上冰箱门 ...
  • 我们使用dbUtil查询数据库时,一般是单表查询,封装数据都是单个对象可以直接封装,当碰到更复杂的数据,比如从一个sql语句同时查询商品信息和客户信息封装到一个订单的对象中,订单对象中的属性如果是商品的属性...
  • 最近工作有用到一些线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念。最近也是遇到一些问题,不搞清楚锁的概念,很容易碰壁,甚至有些时候自己连用没用对都不知道...
  • 需要通过resultMap来实现 有一个对象InHosPatient ,它里面还有一个对象Patient ,那么通过resultMap可以实现将查询出的数据,组装到InHosPatient 中的 Patient 中 public class InHosPatient { /** * 住院日期...
  • 最后在测试方法中通过SqlSession实例对象sqlSession的getMapper(UserDao.class)方法获取该接口实现,并调用接口中的方法完成对数据表的操作。   那么,现在我的问题是,如果现在想要两SQL映射...
  • 通常使用的时候v-model都是绑定一个值,这样没有问题,但在某些需求中会获取选择项的多个值...当时没有看文档的时候,自己也想了一个办法,就是绑定选择项的索引值,然后到对应的nameList数组中取出对应的项也可以。...
  • 从什么是开始说起… 我们都知道也是由成员变量`构造器和方法等构成的 所以其本质也是一个一个对象 需要...对应一个普通的所有对象(这里有点绕) Class类对象无法直接创建 因为它的构造方法是私有的 是由JVM随...
  • Json总体来说是一串有结构的字符串String,从形式来看,它是多个{}组和[]组嵌套成一个大{}的结构,从数据上来说它是由多个对象和对象数组构成的一个大对象。每对{}包含的是一个对象,每对[]包含的是一个多个对象...
  • 最近项目中经常要将数据库中查出来的DO转换为VO,之前的做法是每个都对应一个XXConverter,重复代码把人写的精疲力竭,于是开发了如下工具。 首先,直接看工具代码:public class BaseConverter, VO> { ...
  • post方式传递多个对象记录(不推荐)

    千次阅读 2019-04-01 17:44:59
    post方式传递多个对象记录 1.背景 最近前端提个需求,在a表中增加一条数据,找到对应的id,拿到此id新增几条另一b表数据,这就涉及到前端传来一个对象和一个list对象。这就是我脑海中的反应。这就是直接导致我的后续...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,909,304
精华内容 763,721
关键字:

一个类可以对应多个对象吗