Java少不了类,很多个类有着若即若离的关系,当然也可能是被测面的真实写照,不过研究的不深又怎么会继续发现下去,拿来用就行的拿来主义也不错啊。
- A:修饰符:
- 权限修饰符:private,默认的,protected,public
- 状态修饰符:static,final
- 抽象修饰符:abstract
- B:类:
- 权限修饰符:默认修饰符,public,外部类不能用私有的
- 状态修饰符:final
- 抽象修饰符:abstract
- 用的最多的就是:public
- C:成员变量:
- 权限修饰符:private,默认的,protected,public
- 状态修饰符:static,final
- 用的最多的就是:private
- D:构造方法:
- 权限修饰符:private,默认的,protected,public
- 用的最多的就是:public
- E:成员方法:
- 权限修饰符:private,默认的,protected,public
- 状态修饰符:static,final
- 抽象修饰符:abstract
- 用的最多的就是:public
- F:除此以外的组合规则:
- 成员变量:public static final
- 成员方法:
- public static
- public abstract
- public final
修饰符应该是写的最多的用例了吧,你又不会敲100个输出语句来打印100个HelloWorld吧。
内部类?愿他长寿!
-
内部类访问特点
- a:内部类可以直接访问外部类的成员,包括私有。
- b:外部类要访问内部类的成员,必须创建对象。
- 外部类名.内部类名 对象名 = 外部类对象.内部类对象。
-
局部内部类访问局部变量必须用final修饰
-
局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用。1.8版本的就不多说了。
来个例子:
class Demo1_NoNameInnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inter {
public void print();
}
class Outer {
class Inner implements Inter {
public void print() {
System.out.println("print");
}
}
public void method(){
//Inner i = new Inner();
//i.print();
//new Inner().print();
//Inter i = new Inner(); //父类引用指向子类对象
new Inter() { //实现Inter接口
public void print() { //重写抽象方法
System.out.println("print");
}
}.print();
}
}
Object类的toString()方法真的很好用
apackage com.itboya.object;
import com.itboya.bean.Student;
public class Demo2_ToString {
/**
* 运行结果:com.itboya.bean.Student@40671416
* 通过查看源码(ctrl+单击"toString方法")返现,上述结果中@符号前是给对象所属类的全名称,
* .@符号后面是该对象hashCode值的十六进制的字符串表现形式,toString()源码如下:
* public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*问题:在实际使用时直接打印出类全名称@hashCode值的十六进制的字符串表现形式,是没有意义的
*而实际上我们是想看到对象的具体的详细信息,这样就需要子类重写父类的toString方法
*重写toString方法的意义用用:可以更方便显示属性值,而getXxx()方法获取值可以进行其它运算,可以显示或做其它操作
* @param args
*/
public static void main(String[] args) {
//在重写toString方法前后分别运行改程序,看结果
Student student = new Student("张三",23);
//String str = student.toString();
//System.out.println(str);
//上面的两句话,可以写成下面的一句
System.out.println(student.toString());
System.out.println(student); //直接打印对象的引用,默认调用toString方法
System.out.println("我的姓名是:"+student.getName()+",我的年龄是:"+student.getAge());
}
}
==号和equals方法的区别
-
==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
-
equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
其它就没啥了,了解的多了自然就多了。
ps:每日一词
蝶恋花(正韵)
夜尽寒吹无久雨,惜柳迎风,叶落斜飞去。湘里东君怀念处。蓬莱仙岛楼无数。
阁主扶门移玉柱,魂点思空,下坠人间树。春夏秋冬青杏煮,香残云梦留千古。