黑马程序员_<<面向对象(对象,封装,satic,构造函数,代码块,this)---01>>(二)

2014-11-24 08:56:51 · 作者: · 浏览: 5
p.show();
p.say();
}
}
结果:
静态代码块
构造代码块
无参构造函数
同步代码块
普通代码块
从结果可以看出:
静态代码块优先于构造代码块执行。
构造代码块优先于构造方法执行。
普通代码块和同步代码块定义在方法中,无先后顺序。
5. this关键字
this代表的是本类中的对象,只要是在本类中调用了本类中的方法,那么就this来调用。那个对象调用了类中的方法或者属性,this就表示那个对象。
[java]
/**
* 描述人的类
*/
public class Person{
private String name;// 属性姓名
public Person(String name) {
this.name=name;
}
public void say() {
show();
//也可以是this.show().把this省略了
}
public void show() {
System.out.println("show()"+name);//也可以是this.name,把this省略了
}
public static void main(String[] agrs) {
Personp = new Person("张三");
p.say();
}
}
结果:
show()张三
this关键字用于构造方法中,构造函数之间的调用,要在构造方法中写this(参数);有参数就写参数没有参数就不写参数。this语句必须写在构造函数中的第一行。
[java]
public class Person {
private String name;// 属性姓名
public Person() {
System.out.println("无参构造函数");
}
public Person(String name) {
this();// 调用本类中的无参构造函数
this.name = name;
System.out.println("有参构造函数");
}
public static void main(String[] agrs) {
Person p = new Person("张三");
}
}
结果:
无参构造函数
有参构造函数
6.static关键字
static关键字修饰的成员可以被类名直接调用,也可以被对象调用。但是在类中不能使用this调用,因为加载顺序导致的。
6.1特点:
1.static 定义的属性和方法随着类的加载而加载,随着类的消失而消失。
2.优先于对象的存在。
3.被所有的对象共享
4.调用方法是通过类名来调用,
5.典型用例可以定义计数器
6.2静态方法事项
静态的方法中只能调用静态的属性和方法!非静态方法可以访问静态和非静态成员。静态方法中不能定义this关键字,因为静态优先于对象的存在,所以不能出现this。
6.3. 优缺点
利:对象的共享,节省空间,可以直接被类名调用。
弊端:生命周期过长,访问出现局限性。(静态虽好,只能访问静态) 最后主函数是静态的。
[java]
public class Demo {
private static int count = 0;// 静态变量
public Demo() {
addCount();
}
public static void addCount() {
count++;
}
public String show() {
return "这是第" + count + "运行此程序";
}
public static void main(String[] agrs) {
for(int i=0;i<5;i++){
Demo d = new Demo();
System.out.println(d.show());
}
}
}
结果:
这是第1运行此程序
这是第2运行此程序
这是第3运行此程序
这是第4运行此程序
这是第5运行此程序
7. 主函数
主函数是一个特殊的函数,作为程序的入口,被 虚拟机调用。
Public:代表着函数的访问权限最大,
Static:代表随着类的加载而加载,
Void:主函数无返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
String[] arr:参数类型是字符窜数组。
主函数是固定格式的,jvm识别。
主函数传入的newString[0]的数组,是一个空的字符串数组
8. 静态的使用
静态的变量:当对象中出现了共享数据时,该数据被静态所以修饰,当对象中有特有数据要定义成非静态存在堆内存中。
静态的函数;当功能内部没有访问到非静态数据(对象的特有数据)
静态的应用:将共有的功能封装到一块。不需要对象来调用。
同时将构造方法定义为私有的,防止别的用户创建不必的对象,这样更严谨。
[java]
blic class MathTool {
private MathTool(){
}
public static int max(int a,int b){//求最大值
return a>b a:b;
}
public static int min(int a,int b){//求最大值
return a>b b:a;
}
}
public class Text {
public static void main(String[] args) {
System.out.println("最大值:" + MathTool.max(12, 32));
System.out.println("最小值:" + MathTool.min(12, 32));
}
}
结果:
最大值 :32
最小值 :12