精华内容
下载资源
问答
  • Java初始化对象属性值的方式

    千次阅读 2020-04-05 00:12:57
    Java初始化对象属性值的方式 1、数据库设计 一般我们在数据库设计时很多字段都会设计一个非空值,如下sql: CREATE TABLE `student` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` Varchar(64) Not ...

    Java初始化对象属性值的方式

    1、数据库设计

    一般我们在数据库设计时很多字段都会设计一个非空值,如下sql:

    CREATE TABLE `student` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `name` Varchar(64) Not Null Default '' Comment '姓名',
      `age` int(11) Not Null Default 0 Comment '年龄',
      `addr` Varchar(64) Not Null Default '' Comment '地址',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
    

    实体类对象,一般是通过某种工具自动生成,如下(我写的是jpa的写法,其他类似):

    @Data
    @Entity
    public class Student {
        @Id
        @GeneratedValue(strategy= GenerationType.IDENTITY)
        private Integer id;
    
        @Column(name = "name")
        private String name;
    
        @Column(name = "age")
        private Integer age;
    
        @Column(name = "addr")
        private String addr;
    }
    

    这个时候,我们在做对象插入的时候。以下面的某种写法

    Student student = new Student();
    student.setName("zhangsan");
    
    //InitValue2Obj.initZeroAndEnpty(student);
    studentReposity.save(student);
    

    很明显是不正确的,会报如下错误:

    Caused by: java.sql.SQLIntegrityConstraintViolationException: Column 'addr' cannot be null
    

    这样我们就只能硬性的把所有属性全部赋值。如果没有值就给一个空值或者默认值。但是当随着业务的开展,我们增加了一些列的时候,把一个列的属性设置为非空,这样对于前人的所有insert都要进行一个修改。因此写了一个默认工具类,设置一个初始属性值。

    2、设置对象初始属性值工具类

    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.Date;
    
    public class InitValue2Obj {
    
        /**
         * 设置对象初始属性值
         * @param object
         * @throws Exception
         */
        public static void initZeroAndEnpty(Object object) throws Exception {
            Class cls = object.getClass();
            Field[] fields = cls.getDeclaredFields();
            Method[] methods = cls.getDeclaredMethods();
            for (Field field:fields
                 ) {
                Object o = getFieldValueByName(field.getName(), object);
                if (null == o) {
                    Method method = getMethod(field.getName(), methods);
                    if(field.getGenericType().getTypeName().equals("java.lang.String")) {
                        method.invoke(object, "");
                    }else if(field.getGenericType().getTypeName().equals("java.lang.Integer")) {
                        method.invoke(object, 0);
                    }else if(field.getGenericType().getTypeName().equals("java.lang.Long")) {
                        method.invoke(object,0L);
                    }else if(field.getGenericType().getTypeName().equals("java.util.Date")) {
                        method.invoke(object, new Date());
                    }else if(field.getGenericType().getTypeName().equals("java.lang.Boolean")) {
                        method.invoke(object, false);
                    }
                }
            }
        }
    
        /**
         * 获取相应属性的set方法
         * @param fieldName
         * @param methods
         * @return
         */
        private static Method getMethod(String fieldName, Method[] methods) {
            for(Method method: methods) {
                if(!method.getName().startsWith("set")) {
                    continue;
                }
                if(method.getName().toLowerCase().endsWith(fieldName.toLowerCase())) {
                    return method;
                }
            }
            return null;
        }
    
        /**
         * 获取相应属性的属性值
         * @param fieldName
         * @param o
         * @return
         */
        private static Object getFieldValueByName(String fieldName, Object o) {
            try {
                String firstLetter = fieldName.substring(0, 1).toUpperCase();
                String getter = "get" + firstLetter + fieldName.substring(1);
                Method method = o.getClass().getMethod(getter, new Class[] {});
                Object value = method.invoke(o, new Object[] {});
                return value;
            } catch (Exception e) {
                System.out.println("属性不存在");
                return null;
            }
        }
        
    }
    

    这样在我们调用insert方法时,只需要增加这一步

    InitValue2Obj.initZeroAndEnpty(student);
    

    后续列的变动将不会受到影响


    可能我不足,但我一直在成长

    展开全文
  • 对象属性初始化

    千次阅读 2018-05-12 11:40:38
    对象属性初始化有三种方式把初始化块,放在构造方法下面,问题:这三种方式执行顺序,构造方法->初始化块->声明时public class Hero { public String name = "some hero";//声明该属性的...

    对象属性的初始化有三种方式

    把初始化块,放在构造方法下面,问题:

    这三种方式执行顺序,构造方法->初始化块->声明时

    public class Hero {
    
    public String name = "some hero";//声明该属性的时候初始化
    public Hero(){ name = "one hero";//构造方法中初始化 } { name = "the hero";//初始化块 } public static void main(String[] args) {         Hero h = new Hero();         System.out.println(h.name); }
    展开全文
  • 对象属性初始化有3种 声明该属性的时候初始化 构造方法中初始化 初始化块 package charactor; public class Hero { public String name = "some hero"; //声明该属性的时候初始化 protected float ...

    对象属性初始化有3种

    1. 声明该属性的时候初始化
    2. 构造方法中初始化
    3. 初始化块
    package charactor;
     
    public class Hero {
        public String name = "some hero"; //声明该属性的时候初始化
        protected float hp;
        float maxHP;
         
        {
            maxHP = 200; //初始化块
        }  
         
        public Hero(){
            hp = 100; //构造方法中初始化
             
        }
         
    }
    

    类属性初始化有2种

    1. 声明该属性的时候初始化
    2. 静态初始化块
    package charactor;
     
    public class Hero {
        public String name;
        protected float hp;
        float maxHP;
         
        //物品栏的容量
        public static int itemCapacity=8; //声明的时候 初始化
         
        static{
            itemCapacity = 6;//静态初始化块 初始化
        }
         
        public Hero(){
             
        }
         
        public static void main(String[] args) {
            System.out.println(Hero.itemCapacity);
        }
         
    }
    
    展开全文
  • java对象数组 创建对象数组,初始化对象数组

    万次阅读 多人点赞 2019-07-30 16:34:15
    对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例对象数组的声明形式是: 类名 对象数组名 [ ]; 为对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :此处不是构...

    对象数组的概念:
    如果一个数组中的元素是对象类型,则称该数组为对象数组。
    当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。
    对象数组的定义和使用:
    对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。
    对象数组的声明形式是:
    类名 对象数组名 [ ];
    为对象数组分配内存空间:
    对象数组名=new 类名[数组长度];//注意 :此处不是构造方法了
    可以将对象数组的声明和创建用一条语句来完成。例如:定义一个学生类对象数组,可以用下面的语句定义:Student stu[ ]=new Student[30]; stu [ ]是对象数组名,它所表示的数组一共有30个元素,每一个元素都是Student类的对象名,还没有实例化,所以还必须为每一个元素实例化。比如如下的过程:
    for(int i=0;i<stu.length;i++)
    stu[i]=new Student();
    实例化以后就可以使用每一个元素对象。
    设计一个雇员类,并创建雇员类的对象数组,输出每个雇员的信息

    //设计一个雇员类,并创建雇员类的对象数组,输出每个雇员的信息
    class Employee {   //雇员类
     private String id;  //编号
     private String name; //姓名
     private int age;     //年龄
     private String vocation; //职务
     public Employee(){} //构造方法一
     public Employee(String id,String name,int age,String vocation){
      set(id,name,age,vocation);
     }
     //设置属性的方法
     public void set(String id,String name,int age,String vocation){
      this.id=id;
      this.name=name;
      this.age=age;
      this.vocation=vocation;
     }
     public String toString() {
      String mess=id+","+name+","+age+","+vocation;
      return mess;
     }
    }
    public class Example4  {
     public static void main(String[] args) {
      Employee 雇员[]=new Employee[3];
      int i;
      for(i=0;i<雇员.length;i++)//为对象数组中每一个元素实例化
      雇员[i]=new Employee();//如果没有写构造方法一,而这样写,会出错
      //因为类中有有参的构造方法,系统就不会在默认给无参的构造方法了,
      //所以当类中写了有参的构造方法后,要用无参的构造方法时必须写出来
      
      //每一个对象元素分别初始化
      雇员[0].set("0001","张文军",50,"总经理");
      雇员[1].set("0002","李琦",45,"副经理");
      雇员[2].set("1016","张丽",28,"秘书");
      for (Employee employee:雇员)
       System.out.println(employee.toString());
     }
    }
    

    在这里插入图片描述
    普通型for循环和增强型for循环
    普通型

    a={1,2,3,4,5};
    for(int i=0;i<a.length;i++) {
     System.out.println9(a[1]);
    }
    

    增强型

    for(int element:a) {
    System.out.println(element);
    }
    

    两者结果相同,但是增强型更为简洁

    对象数组还可以采用初始化的方法创建。创建形式是:
    类名 对象数组名[ ]={对象列表};

    设计一个雇员类,创建雇员类的对象数组并初始化,输出每个雇员的信息,仍然沿用上面的Employee类,程序如下

    class Employee {   //雇员类
     private String id;  //编号
     private String name; //姓名
     private int age;     //年龄
     private String vocation; //职务
     public Employee(){} //构造方法一
     public Employee(String id,String name,int age,String vocation){
      set(id,name,age,vocation);
     }
     //设置属性的方法
     public void set(String id,String name,int age,String vocation){
      this.id=id;
      this.name=name;
      this.age=age;
      this.vocation=vocation;
     }
     public String toString() {
      String mess=id+","+name+","+age+","+vocation;
      return mess;
     }
    }
    public class Example11 {
     public static void main(String[] args) {
      //先创建3个雇员对象
      Employee employee1=new Employee("0001","张文军",50,"总经理");
      Employee employee2=new Employee("0005","李琦",45,"副经理");
      Employee employee3=new Employee("1016","张丽",28,"秘书");
      //声明对象数组并直接初始化
      Employee 雇员1[]={employee1,employee2,employee3};
      output(雇员1);//输出雇员信息
      System.out.println("------------------");//分割线
      //声明对象数组并直接初始化,初始化元素直接调用
      //构造方法创建对象
      Employee 雇员2[]={new Employee("0001","张文军",50,"总经理"),
      new Employee("0005","李琦",45,"副经理"),
      new Employee("1016","张丽",28,"秘书")};
      output(雇员2);
     }
     //定义方法用于输出雇员信息,注意方法是private,static
     private static void output(Employee 雇员[]){
      for(Employee employee:雇员)
       System.out.println(employee.toString());
     }
    }
    

    在这里插入图片描述

    展开全文
  • JS初始化对象

    千次阅读 2020-05-14 18:11:37
    什么是初始化对象? 顾名思义,我们创建对象时便已调用默认编写的init方法,实现初始化。 我们要求调用say方法时,能输出init里的属性。 实现 一、 先调用init方法 输出: wc 1 这种方法每次需要手动输入,不满足...
  • vue对象属性关联select,初始化select值 vue对象的某一个属性关联select,初始化select值,之后select选中其他下拉值没有选中显示在select种,有以下2种解决办法 在项目中如果select的v-model关联使用对象的某一个...
  • Python 对象初始化

    千次阅读 2019-08-02 17:52:30
    class Person : # 在类中可以定义一些特殊方法(魔术方法) # 特殊方法都是以__开头,__结尾的方法 # 特殊方法不需要我们自己调用,不要尝试去调用特殊方法 # 特殊方法将会在特殊的... # 创建对象的流程 # p1...
  • 类、方法、属性、实例对象初始化函数、继承的示例解析
  • 学习本篇文章后会了解到:类的创建,为对象添加属性对象初始化,自定义对象的输出,类属性和类方法的创建。 1. 类的定义与格式 类是对一群具有相同特征或者行为的事物的一个统称。 类是一个模块,是...
  • java是一种面向对象的编程语言,那么了解创建对象时程序会怎么执行就变得尤为重要,下面我们就一起看看在我们使用new关键字创建对象时是怎么对属性初始化的: 下面是一个Person类,其中有成员变量age和静态变量name...
  • java 对象属性初始化顺序

    千次阅读 2018-05-30 16:19:56
    1、为静态属性分配内存并赋值(后面大括号语句不执行,这里是初始化,只是添加变量和值)   或 执行静态代码块(立刻执行大括号里面的语句)  为什么这样说呢,因为谁在前先加载谁,包括静态属性之间,和静态块...
  • 构造方法时进行对象初始化,以及对象实例化,参数传值是我们这片文章主要要 介绍的东西。 接下来我们就开始讲解一下具体过程: 1.首先我们建一个学生类Student。我们规定这个类的成员变量为sno和name, 接着构造一个...
  • 什么是初始化属性 在声明属性的同时直接给属性进行初始化。 public IEnumerable<Score> MyScores { get; set; } = new HashSet<Score>(); 若当一个类的属性是引用类型时,我们必须要先初始化该引用类型...
  • JAVA类属性和对象属性初始化顺序

    千次阅读 2016-07-14 16:11:50
    1)类属性(静态变量)定义时的初始化,如:static String ="string-a"; 2)static块中的初始化代码,如 ...3)对象属性(非静态变量)定义时的初始化,如:static c="string -c"; 4)构造方法(函数)中的初始化代码,
  • 直接把属性定义在主构造函数中,这样我们创建对象的时候就直接把属性初始化了 class User( var name: String , var age: Int) 5 . 延迟初始化 延迟初始化可以把属性初始化推迟到要访问这个属性之前...
  • java对象初始化值的三种方式

    千次阅读 2019-07-07 17:17:37
    第一种:使用xml    张三"/> ...@ConfigurationProperties(prefix= "person") 会在yaml中,找到person定义的key,将里面的...注意点,无论使用哪种方式,对实体类进行值的初始化对象的字段要set方式,才能赋值
  • java基础-对象初始化

    千次阅读 2019-07-08 21:06:02
    1. 我们先来看看各种类型的属性初始化的默认值 public byte b; public short s; public char c ; public int i ; public float f; public long l; public double d; public boolean flag ; public InitDemo...
  • Java初始化对象的工具 - 构造器

    千次阅读 多人点赞 2020-03-12 02:06:15
    本文关键字:对象初始化、实例化、构造器、构造方法。明确了类与对象的关系后,我们知道:类只是一个定义的结构,用来表述我们想要描述的事物,即具备哪些属性(成员变量),可以产生哪些行为(方法)。那么具体...
  • 1.初始化实例化属性。可接受任意关键字参数,并把他们都作为属性赋值给实例。使用**kw,除了可以直接使用self.name = ‘xxx’设置一个属性外,还可以通过setattr(self, ‘name’, ‘xxx’)设置属性。class Pers
  • Spring注解配置初始化对象()

    万次阅读 2017-12-28 09:26:07
    Spring注解配置初始化对象(): spring中使用注解配置对象前,要在配置文件中配置context:component-scan 标签 告诉spring框架,配置了注解的类的位置 配置文件applicationContext.xml: xml version="1.0" ...
  • python 自定义类及初始化对象

    万次阅读 2020-06-29 18:13:41
    python自定义类,需用到class关键字 ...初始化对象直接在类后面添加括号即可 # 初始化对象 p = Person('汉城节度使', '50') 获取对象信息,直接对象.属性即可 # 打印对象信息 print("name:" + p.nam.
  • c#对象初始化

    千次阅读 2018-08-01 16:10:54
    以往在对对象属性进行初始化时我们一般会使用构造方法的形式对对象属性进行初始化,如 class Program { static void Main(string[] args) { Student student = new Student(15, "spring","男&...
  • Swift中属性的几种初始化方式

    千次阅读 2018-05-31 10:17:47
    在Swift中的初始化方法中(init中),必须对属性赋初值,但是有以下几种避免的方法。 1、将属性标识为可选项(?),这样,属性有一个默认的nil初始值。 2、将属性标识为肯定有值,用感叹号(!)标识,需要注意的是,感叹...
  • Java 属性初始化

    千次阅读 2018-12-16 12:58:54
    步骤 1 : 对象属性初始化 对象属性初始化有3种 1. 声明该属性的时候初始化  2. 构造方法中初始化 3. 初始化块 package charactor; public class Hero { public String name = "some hero"; //声明...
  • JAVA之对象初始化过程详解及面试题

    千次阅读 2017-07-20 08:48:15
    一个朋友在JAVA面试题中遇到了对象初始化问题,发现自己只能靠敲代码,查看运行结果才能做出来。真是丢人呀。所以今天通过测试,在巩固一下基础,顺便写写笔记。 对象初始化流程如下: 初始化父类的静态成员...
  • C# 对象数组的初始化

    千次阅读 2020-06-03 17:22:09
    C# 对象数组的初始化: //定义一个对象的类,包含2个文本属性 public class menunode { public string name; public string text; } //初始化一个类的数组 public static menunode[] ms = new menunode...
  • python类初始化属性在def __init__()中定义,实例化对象后可直接调用 python类非初始化属性在def func()中定义,实例化对象后,先调用调用函数,再调用属性 代码 class Mdata(object): def __init__(self): ...
  • MATLAB面向对象编程属性初始化方法

    千次阅读 2017-05-19 00:38:46
    在MATLAB面向对象编程的类构建中,属性初始化一般有两种方法:一种是使用构造函数,另一种则是在定义属性的时候初始化。  使用构造函数的例子: classdef DemoClass  properties  age;  hight;  end ...
  • 2.为这个对象属性设置初始值----初始化方法(init) 这个初始化方法就是__init__方法,__init__是对象的内置方法 __init__方法是专门用来定义一个类具有哪些属性的方法 class Cat: def __init__(self): ...
  • Spring之Bean对象初始化和销毁方法

    千次阅读 多人点赞 2019-03-04 21:19:53
      在Bean对象的完整的生命周期前...通过bean标签中的init-method和destroy-method属性来设置初始化及销毁对象时的回调方法 通过@PostConstruct注解和@PreDestroy注解来标示初始化的方法及销毁回调的方法。 两种方...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 943,578
精华内容 377,431
关键字:

初始化对象属性