① 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里添加数据
两种向Set中添加元素的方法,第一种是使用add()方法,每次添加一个元素到set中,当集合中不存在相同元素时将添加到集合中,并返回true,当集合中存在元素时,返回false。代码如下:
Set<String> sets = new HashSet<>();
sets.add("String");
System.out.println(sets.add("Tree"));
System.out.println(sets.add("String"));
List<String> lists = new LinkedList<>();
lists.add("test");
lists.add("test");
lists.add("one");
System.out.println(sets.addAll(lists));
还有一个是向集合中批量添加元素的方法addAll(),这个方法的入参是Colletion。上述代码执行结果如下:
扩展知识
Set集合可以知道某物是否已近存在于集合中,不会存储重复的元素,注重独一无二的性质,用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。可以很好地作为排重时使用的数据结构,但要注意集合内部数据一般情况没有顺序。常用的set有HashSet和TreeSet。
TreeSet是JAVA中集合的一种,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,java.io.Serializable接口。一种基于TreeMap的NavigableSet实现,支持2种排序方式:自然排序或者根据创建TreeSet 时提供的 Comparator 进行排序。
③ java get set怎么给时间类型的变量赋值
定义属性的时候 要提供get set 方法 。赋值的时候就set属性()即可。
④ java中charset怎么赋值
这个方法是把字节数组转为字符串用的,第一个参数是字节数组,第二个参数是字符编码。比如:byte[]bytes=newbyte[1024];newString(bytes,"UTF-8");意思是把bytes数字按"UTF-8"的编码方式转成字符串。
⑤ java中对象属性用set赋值时是开辟新内存还是在原有的内存中直接修改的
直接修改的是原对象中的属性
⑥ 在java中 变量之间是如何赋值的
一、基本类型数据赋值
实验1 :定义一个int 类型变量a = 3,并将a 赋值给int b,然后将a ,赋值为5,那么b 的值是3 还是5 呢?
int a = 3;
int b = a ;
a = 5 ;
System.out.println(" a = " + a+" b = "+b );
运行程序 ,打印结果为 :
a = 5 b =3
我们看到,b并没有随a的改变而改变。基本数据类型是值赋值。
二、String类型数据赋值
实验2:定义一个String类型变量s1 赋值为“a”,并将s1赋值给String s2 ;然后将s1赋值为“b”,那么s2的值是 “a”还是 “b”?
String s1 = "a" ;
String s2 = s1;
s1 = "b" ;
System.out.println("s1 = "+s1+" s2 = "+ s2);
运行程序 ,打印结果为 :
s1 = b s2 =a
我们看到,s2并没有随s1的改变而改变。
三、自定义数据类型赋值
实验3: 创建一个TUser u1 ,并将u1赋值给TUser u2 ,将 u1重新赋值 ,u2会随着u1改变而改变吗 ?
TUser u1 = new TUser();
u1.setId(1);
TUser u2 = u1 ;
u1 = new TUser();
u1.setId(2);
System.out.println("ui :"+u1 + "\t\n" +"u2 : "+ u2);
运行程序,打印结果为:
u1 :TUser(id=2)
u2 : TUser(id=1)
我们看到u2并没有随着u1的改变而改变。
如果我们不改变u1指向的地址,而是改变u1指向地址所对应的数据(即将 u1 = new TUser(); 注释掉)。那么u1,u2 打印的记过将都会是 TUser(id=2)
通过以上三个实验我们发现:
变量之间的赋值,可以说没有所谓的值赋值和地址赋值。
简而言之,将一个变量a赋值给另一个变量b,是将这个变量a的值,拷贝一份给变量b(如果a是引用类型,就拷贝引用,如果是基本类型,就拷贝原始值)
⑦ java的set方法
我怎么没明白呢? xx是个类还是个java primitive type?给java 变量赋值用 =
变量 = 值;
就行了啊。
看你写xx.setParentId ('0');估计xx是个类?xx有个变量叫parentId? 你想给这个parentId一个值?
你可以在xx类里叫一个set方法
Class XX{
private int parentId;
public void setParentId(int parentId){
this.parentId = parentId;
}
}
外部调用时 xx.setParentId(0);就可以。
当然,如果parentId是字符串,就把int的地方改成String,然后调用xx.setParentId("0");
⑧ java反射给字段赋值就是给实体类的set赋值,怎么做
packagecom.test;
importjava.lang.reflect.Field;
publicclassA{
privateStringname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicstaticvoidmain(String[]args){
try{
Class<A>c=A.class;
Fieldfield=c.getDeclaredField("name");//获取字段
Objectobj=c.newInstance();//实例化对象
field.set(obj,"aaa");//为字段赋值
System.out.println(field.get(obj));
}catch(Exceptione){
e.printStackTrace();
}
}
}
⑨ java新手求助super和set给父类赋值!
class Animal
{
private int age;
public Animal(){
}
public Animal(int age){
this.age = age;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
class Dog extends Animal
{
public Dog(int age){
// super(age); //------------为什么此处用setAge(age);不行呢???????
super.setAge(age); //setAge(int)本是父类的方法,所以要这样调用,另外这样做还需要在父类当中声明一个无参的构造方法
}
public int getAge(){
return super.getAge();
}
}
public class Test6
{
public static void main(String[] args)
{
Dog dog = new Dog(4);
System.out.println(dog.getAge());
}
}
⑩ JAVA中的SET是设置的意思,但是它和我们直接用等号赋值有什么区别啊
一个是 属性私有化
另外可以动态赋值