java 对象包含属性和方法(行为);
成员变量(属性):也就是属性,类中定义的变量(又分为实例变量,类变量(static修饰的),常量)
局部变量:方法中定义的变量()
如果局部变量和成员变量重名,则成员变量失效,可以加this访问类中的成员变量。
java常用关键字:
this (1)this调用本类中的属性,也就是类中的成员变量;
(2)this调用本类中的其他方法;
(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。
protected:
1.子类和父类在一个包内,父类中protected修饰的方法,变量对子类可见;
2.不在一个包内,子类可以访问继承自父类的方法,不能访问父类自己实例的方法;
例如: SonObject2 sb2 = new SonObject2();
sb2.sp();
FaObject1 fb = new FaObject1();
fb.sp();

final:
修饰类:最终类不可被继承 如string类;
修饰方法:可以被继承但不可被重写;
修饰基本数据类型:常量不可修改;
修饰引用数据类型:如数组,对象,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改


static 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问

修饰成员变量:也称为静态变量,静态变量和非静态变量的区别是:
静态变量被所有对象共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响

修饰成员方法:由于静态方法不依赖于任何对象就可以进行访问,
因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,
在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都必须依赖具体的对象才能够被调用。

修饰代码块: static块可以优化程序性能,是因为它的特性:只会在类被初次加载的时候执行一次

string,stringbuffer,stringbuilder
三者都是final类,不可继承,不可修改;
String定义的是常量,不可变;每次操作对象相当于生成了新变量,回收旧变量,占用内存
(String str="123"; str=str+"456"; 相当于创建一个str对象,后面的操作是回收旧的str变量,生成一个新的str。相当于str="123456");
Stringbuffer是线程安全的,直接操作变量,快;
Stringbuilder是非线程安全,直接操作变量,最快;
StringBuffer 类中没有重写定义equals 方法,这里的equals 方法是调用的Object 中的方法而object类的equals方法是比较地址的(与==一样 this==obj),而不是比较值的所以str1.equals(str2) 返回的是false!