1.类是某一批对象的抽象,对象才是一个具体的存在的实体,你我他都是人的实例,而不是人的类。
2.类可以包含三种最常见的成员:构造器,成员变量,方法
3.
4.java世界里,属性,如某个类具有age属性,通常是说,该类包含setAge()和getAge()两个方法。
5.修饰符中,public,protected,private三个最多只能出现其中之一,abstract和final只能出现其中之一。它们可以和static组合起来修饰方法。
6.static修饰的成员表示它属于这个类本身,而不是某个实例,static修饰的成员变量和方法也叫类变量,类方法,不使用的则为实例变量和实例方法。
7.构造器的修饰符(public,private,protected)可以省略,当时用new关键字来调用构造器时,构造器返回类的实例,可以把类的实例当成构造器的返回值,因此构造器的返回值总是当前类i。::
8.对象的作用:(1)访问对象的实例变量,(2)调用对象的方法
9.static修饰的方法和成员变量,既可以通过类来调用。也可以通过实例调用,没有使用static修饰的普通变量和成员方法,只能通过实例来调用。
10.类是一种引用数据类型,当把一个对象赋给一个引用变量时,java让引用变量指向这个对象,引用变量存放的仅仅是一个引用,本身只存储了一个地址值,它指向实际的对象。如 Person p = new Person();Person类型的变量实际上是一个引用,它被存放在栈内存中,指向实际的Person对象,真正的Person对象存放在堆内存中。对象的成员变量放在堆内存中,引用变量只是指向该堆内存的变量,java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象,多个引用变量可以指向同一个对象。,就像C中指针,java语言把这个指针封装起来,避免开发者进行繁琐的指针操作。如果对内存中某对象没有任何变量指向它,那么程序就将无法在访问该对象,该对象就变成了垃圾,java的GC垃圾回收机制将回收该对象,释放该对象所占的内存区。若想让GC回收某个对象,只需切断该对象的所有引用变量即可,即将这些引用变量赋值为null。
11.this关键字总是指向调用该方法的对象,this作为对象的默认引用两种情形:(1)构造器中引用该构造器中正在初始化的对象(2)在方法中引用调用该方法的对象。 this关键字最大的作用就是让类中的一个方法,访问该类中的另一变量或者方法。
public class Dog{ public void jump(){ System.out.println(); } public void run(){ Dog d = new Dog(); d.jump(); //改成this.jump,也能直接写 jump()省略this前缀,java允许对象的一个成员直接调用另一个成员,即一个方法访问该类中定义的其他方法、成员变量时加不加this前缀都行。 System.out.println(); } } public class DogTest{ public static void main(Strng[] args){ Dog dog = new Dog(); dog.run(); } }
在run方法中调用jump方法需要一个Dog对象,没有使用static修饰的变量或者方法必须使用对象来调用。当程序调用run方法时,一定会提供一个Dog对象,通过this代表这个对象。
this可以代表任何对象,this出现在某个方法体中,它所代表的对象是不确定的,但是类型是确定的,代表的对象只能是当前类,只有当这个方法被调用时,他所代表的对象才能被确定下来,谁在调用这个方法,thish就代表谁。
static修饰的方法不能使用this,如果在static修饰的方法中使用this关键字,则该关键字不能指向合适的对象,故static修饰的成员不能访问没有static修饰的成员。
public calsss Test{ public void demo(){ System.out.println(); } public static void main(String[] args){ demo(); } }//报错:无法从静态上下文中引用非静态 方法demo()
java方法的参数传递时值传递,将实参的的副本传给方法的形参,实参本身不会受到任何影响。要想传给实参值被改变,需要将实参的对象传递过去,这样就可以修改实例下的该实参变量,虽然也是值传递,但是对象变量是一个引用,就像传递指针一样。
public void swap(Person ps){
ps.a=5
} 为方法指定数量不确定的形参。在最后哦一个形参的类型后增加3个点(...),就表示该形参可以接受多个参数值,形参个数可变的参数本质上市一个数组参数。
public static void test(int a, String...books)=====public static void test(int a, String[] books)