class="MsoNormal">包括:
基本数据类型 byte char int short long boolean float double
流程控制 if else switch case for do while break return goto
修饰符 public private protected(访问修饰符) class interface abstract this super static final
?
1. public protected private 默认访问权限的区别:
public 一个程序中不同的包均可访问,只需引包
private 只能在同一个类中被访问
protected 只能在同一个包中被访问 但是可使用继承来访问,比如大学生类继承了学生类,则大学生对象可以直接调用学生类中的protected方法.
如果需要用并且不继承,可以间接来使用
(用public 去调用包中的protected,再通过调用public间接调用)
默认的访问权限? 介于 private和protected之间?? 只能在同一个包中被访问??? 不可使用继承来访问
尽量写成私有的,通过公有的方法调用属性.
?
2. this的用法
?
a. 可以解决属性和局部变量同名而无法赋值的问题(有歧义的时候必须使用)? 只能用在一个非静态方法之中,指调用当前方法的对象
?
private int n; public void setNum(int n){ n=n;//无法正常赋值 this.n=n;//可以正常赋值, 此时this指对象 } private int n; public void setNum(int m){ n=m;//可以正常赋值 }
?b. 在构造方法中使用,调用某一个构造方法,自动匹配
?
?
public Student(){ this("这个this调用本类的某一个构造方法,根据你在括号里面传入的数据来调用");//调用了第二个构造方法,在一个构造方法中调用一个构造方法必须写在第一行 } /** * 例如:public Student(){ * this.("张三"); * } */ public Student(String name){ this.name=name; } public Student(int n){ this.n=n; }
?3.?????? super与this的差别
?
?
super调用的是当前类父类的构造方法或对象.子类创建对象必须调用父类的无参构造方法,如果父类没有,则必须重写子类的构造方法.
?
?
//此为默认的 public Ustudent(){ super(); } //如果父类没有无参构造方法,则调用这个重写的方法 //public Ustudent(){ // super("取"); //}
?
?
?
4.?final的使用
?
final 可以修饰 类,属性,方法,局部变量
?
类不能被继承
?
属性,局部变量的值只能赋值一次,不可修改
?
方法不能被重写
?
?
?5. static的使用
?
static 可以修饰 类,属性,方法,代码块
?
把属性写成静态的,意味着该属性变成共享的,所有对象均可改变,值也是同时改变
?
可经过类名直接调用,不用经过对象.例如:student.name=”张三”;其中name值是静态的,正因为可以直接通过类名调用,所以静态属性一般写成public的,否则无法直接类名调用。
?
?
?
把方法写成静态的,在继承的时候,如果在创建对象时候创建为父类对象,类型为子类本身类型? student stu=new Unstudent();和本身类型已经无关了,通常使用类名直接调用。Stu调用的全部是父类student的方法,而不是Unstudent的方法,无法体现多态性
?
?
?
代码块的概念:
?
?
{ System.out.println("可任意写代码."); }
?
?
?
?
?
或者
?
static{
?
}
?
?
?
Static代码块如果不在主类中
?
创建对象之后会自动执行主函数,再执行静态代码块,再执行非静态代码块.再执行
?
?
如果静态代码块在主函数里面,会先执行静态代码块,再执行主函数.在主类里面使用,常用来加载配置文件.
?
创建对象之前会先实例化静态属性再调用构造方法.
?
public class A{ public A(){ System.out.println("A"); } } public class B extends A{ public B(){ System.out.println("B"); } } public class C{ public C(){ System.out.println("C"); } public static A a=new A();//静态属性.在main之前会执行 public B b=new B();//非静态属性 public static void main(String args[]){ C c=new C(); c.change(); } public void change(){ B b1=new B(); } }
?
?
?
?
先初始化静态属性a 输出A
?
然后调用main() 创建C对象? 此时先初始化静态B对象,此时会输出AB(有疑问参见继承)
?
再调用C的构造方法输出C
?
c.change()?? 创建B对象? 输出AB
?
所以结果为
?
A
?
A
?
B
?
C
?
A
?
B
?