匿名对象能否调用属性并赋值?
匿名对象能调用属性并赋值,因为每次调用都会创建一个新的对象,赋值完后就变成垃圾了。所以没有意义
priate: 封装, 提供setXXX和getXXX来操作被封装的属性
this: 因为setXXX(String age),如果这个时候成员变量也是private String age,重名了,就近原则,这个时候就是age给自己赋值了,
所以要加this.age=age
setXXX(String age){
age = age; 所以要加this.age=age
}
构造方法:初始化类的属性
没有返回值
可以重载,在创建类的时候可以直接初始化类的属性;
没有构造方法,默认会给一个空参构造函数 null 、0 等
有了有参构造,初始化必须用有参,所以建议加上一个无参构造
static 修饰属性,随着类的加载而加载,优先于对象存在,放在方法区的静态区,被所有对象共享,只要初始化一次,节约内存
可以直接用类名.静态属性/方法来赋值 Person.name
静态只能访问静态
类比:static修饰的是解压缩文件,而非静态的是压缩文件,需要创建一个对象来解压缩才能用,所以非静态成员方法可以访问静态成员变量,而静态成员方法不可以访问非静态成员变量(因为这个时候非静态的还没有解压缩,或者说还没被创建出来!)自然地,静态属性或方法不能有this关键字
举个例子,如下,这个时候static String country;是静态的,所以只要用类名.静态属性来赋值一次就行了。
public class ArrTest {
public static void main(String[] args) {
Student st1 = new Student();
st1.name = " pingan";
Student.country = "china";
st1.say();
Student st2 = new Student();
st2.name = " wuyanzu";
st2.say();
}
}
class Student{
String name;
static String country;
public void say(){
System.out.println("name:"+ name + ",country:"+ country);
}
}
注意:如果一个类中所有的,需要创建一个私有构造方法,目的是不让其他本类创建对象,类中的方法用类名直接调用即可
import nupt.cn.ArrTest;
public class LongTest {
public static void main(String[] args) {
int[] arr = new int[] {1,33,5,7};
ArrTest.max(arr);
ArrTest.through(arr);
ArrTest.reverse(arr);
}
}
package nupt.cn;
public class ArrTest {
private ArrTest() {}
//max
public static void max(int[] arr) {
int max = arr[0];
for(int i = 0 ; i < arr.length; i++ ) {
max = max > arr[i] ? max : arr[i];
}
System.out.println(max);
}
//through
public static void through(int[] arr) {
for(int i = 0 ; i < arr.length; i++ ) {
System.out.print(arr[i]+ " ");
}
System.out.println();
}
//reverse
//注意:这里要加一个brr来保存,只用一个arr不行!!!
public static void reverse(int[] arr) {
int[] brr = new int[arr.length] ;
for(int i = 0 ; i < arr.length; i++ ) {
brr[i] = arr[(arr.length) - i -1];
}
through(brr);
}
}