「set赋值JAVA」set赋值给set
本篇文章给大家谈谈set赋值JAVA,以及set赋值给set对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java中get set 方法赋值问题
- 2、java 怎么给set赋值
- 3、java中生成一个对象给他赋值是用构造速度快还是用set方法比较快
- 4、java中的get 和set方法
- 5、Java里面,反射父类里面数字类型字段,怎么set值
- 6、java新手求助super和set给父类赋值!
Java中get set 方法赋值问题
setter、 gettre
setter(private String name):public void setName(String n);
getter(private String name):public String getName();
class Person{ //类名称首字母大写
private String name ;
private int age ;
public void setName(String n){
name = n ;
}
public void setAge(int a){
age = a ;
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ //没有static
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class Hello{
public static void main(String args[]){
Person per = new Person() ; //声明并实例化对象
per.setName("张三") ;
per.setAge(20) ;
per.tell() ;
}
}
以上的代码只是可以访问,不过没有验证,但是问题是验证在哪块?
应该在setter之中增加检查操作
class Person{ //类名称首字母大写
private String name ;
private int age ;
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a =0 a = 250){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ //没有static
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class Hello{
public static void main(String args[]){
Person per = new Person() ; //声明并实例化对象
per.setName("张三") ;
per.setAge(-20) ;
per.tell() ;
}
}
以后在进行开发的时候,如果有需要,则在setter上加入一些验证措施
而getter只是简单的将数据返回即可,不需要做任何的验证。
疑问?为什么现在没有在程序之中使用getter()方法?
现在类之中的getName()和getAge()两个方法虽然被定义了,但是发现
并没有被使用,那么这样的定义还有意义?
这类之中的属性定义setter、getter操作方法的目的就是为了设置和
取得属性的内容,也许某一个操作暂时不使用到取得的操作,不过从
开发来讲,必须全部提供,
class Person{ //类名称首字母大写
private String name ;
private int age ;
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a =0 a = 250){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ //没有static
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class Hello{
public static void main(String args[]){
Person per = new Person() ; //声明并实例化对象
per.setName("张三") ;
per.setAge(-20) ;
per.tell() ;
System.out.println(per.getName()) ;
}
}
以后在定义类的时候,所有的属性都要编写private封装,
封装之后的属性如果需要被外部操作,则编写setter、getter.
java 怎么给set赋值
通过remove和add方法,set集合中的对象属性为private final
Set接口
集合里的多个对象没有明显顺序。Set集合和Collection基本一样,没有
提供额外方法,只是和Collection行为不同
Set集合不允许包含相同的元素,如果add的是两个相同元素会返回false
Set不实用==运算符,根据equals方法
HashSet类
HashSet类是Set接口的典型实现,大多数时候使用Set集合都是用这个类实现
HashSet按Hash算法来存储集合中的元素
HashSet特点:
1.不能保证元素的排列顺序,顺序可能变化
2.HashSet不是同步的,多个线程同时访问一个Set集合,必须用代码
保证同步
3.集合元素值可以是null
当向HashSet集合中存入一个元素,HashSet会调用该对象的HashCode()
得到对象的hashCode,根据HashCode来决定对象在HashSet中的位置
如果两个元素equal方法比较返回true但是hashCode()方法返回值不同,
HashSet会把两个元素存储在不同位置
HashSet判断两个元素相同需要equal和hashCode都相同
因此重写类的equals方法和hashCode()方法要保证两个对象通过equals
返回true时hashCode也相等
Hash算法保证通过一个对象快速找到另一个对象。可以很快的执行,当需要
查找集合中的某个元素时,hash算法可以直接根据该元素的值找到该元素
从而让程序快速找到元素。
在数组中通过数组元素索引寻找元素,HashSet通过hashcode索引
重写hashCode()方法的基本步骤
当两个对象通过equals方法返回true时,两个对象的hashCode相等
对象中用作equals比较标准的属性,应该用来计算hashCode
向HashSet中添加可变对象时,如果修改HashSet集合中对象,有可能导致
该对象与集合中其他对象相等,从而导致HashSet无法正确访问对象
HashSet有一个子类 LinkedHashSet,LinkedHashSet集合也是根据HashCode来决定
元素的存储位置,同时使用链表维护元素次序,这样是的元素看起来是以
插入顺序保存,便利集合时会按插入顺序来访问。
Linked需要维护元素的插入顺序,性能略低于HashSet,但在迭代时性能更好
TreeSet是SortedSet接口的唯一实现
TreeSet可以确保元素处于排序状态。提供了几个额外方法:
1.Comparator
comparator():返回当前Set使用的Comparator,或者null,表示
自然的方式排序
2.Object first():返回集合中的第一个元素
3.Object last():返回集合中最后一个元素
4.Object lower(Object
e):返回集合中位于指定元素之前的元素
5.Object higher(Object
e):返回集合中位于制定元素之后的元素
6.SortedSet
subSet(fromElement,toElement):返回set的子集,范围从from到to
7.SortedSet headSet(toElement)返回set子集,小于toElement
8.SortedSet
tailSet(fromElement)返回set子集,由大于等于fromElement元素组成
TreeSet是根据元素值来进行排序而不是根据插入顺序
TreeSet采用红黑树的数据结构对元素排序 :支持自然排序(默认)和定制排序
自然排序:
TreeSet会调用集合元素的compareTo方法来比较元素之间的大小关系,
然后将集合元素按升序排列。
Java提供了一个Comparable接口,该接口定义了一个compareTo(Object obj)方法
该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象
可以比较大小。obj1.compareTo(obj2),如果方法返回0,表明两个对象相等。如果
返回正整数,表明obj1大于obj2;如果返回负整数,表明obj1小于obj2
如果要将对象添加如TreeSet该对象必须实现Comparable接口
当想TreeSet中添加对象时,会先将要添加的对象与TreeSet中的对象用compareTo比较
如果找不到compareTo则引发ClassCastException异常
因为只有同一个类型才能比较大小 所以TreeSet中添加的应该是同一个类型的对象
TreeSet和HashSet集合中的对象如果是可变对象,对象属性改变时,会导致集合处理
对象复杂化,易出错。所以应该尽量在集合中添加不可变对象
不可变对象是
1.属性为private final
2.含有带参数构造器,为对象初始化
3.属性有get方法没有set方法
定制排序:
TreeSet的自然排序是根据集合元素大小,TreeSet将它们以升序排列。使用定制
排序,如降序,使用Comparator接口的帮助。接口中包含一个int compare(T o1,T o2)
用于比较o1和o2的大小:重写该方法可以改变排序规则
java中生成一个对象给他赋值是用构造速度快还是用set方法比较快
看你的需求。
举个例子
一个User对象,他的名字是必须的,而年龄,性别之类的可以先不填写
那么这时候可以在构造方法中给名字(name)赋值,其他的非必须的可以用set方法
如果一般性的看,其实都是一样的,虽然name是必须属性,但是你可以先new一个不带name的然后紧跟一条set语句。
但两者之间有一点点小区别的,起码你提供一个必须要name才能构造的构造方法的时候,就算别人(用你的代码的人)不知道user是必须属性,由于你的强制要求,他也会把name传进来,不然就编译不通过。但是如果写成set方法,那么他不写name是正确的,不跟后面的setName也是正确的,所以要等到程序运行出错的时候才能发现需要setName。可能还要定位一下,排查起来不如前面的简单。
这里的区别很微妙,属于代码结构优化的层次,需要慢慢理解
速度上,个人觉得几乎是一样的,不需要纠结
java中的get 和set方法
class A {
int a = 0;
public A() {}
public void setA(int aNum) {
a = aNum;
}
public int getA() { return a; }
}
// set 和 get 就是用来操作其中a变量的,是javabean 的基本思想,没什么限制。。名字可以自己取
Java里面,反射父类里面数字类型字段,怎么set值
你在invoke反射方法时。这个你要调用父类的构造方法或者set方法来赋值。就可以的。
java新手求助super和set给父类赋值!
private int age;
说明age对于Dog子类是不可见的,因此你调用setAge是不行的
关于set赋值JAVA和set赋值给set的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-21,除非注明,否则均为
原创文章,转载请注明出处。