黑马程序员java 三篇《面向对象上:类》

来源:互联网 发布:阶层 知乎 编辑:程序博客网 时间:2024/05/17 02:25
------- android培训、java培训、期待与您交流! ----------

原来学的编程都没有这个概念,突然出来个类,我现在知道他为啥叫类了,因为学起来真的很累……类: 动物    猫 狗 都是对象

类:可以将数据和函数封装在一起,数据表示属性,函数表示类的行为;定义类就要定义类的属性和行为(方法);

class person

{

int age;   //定义person 的属性age

void showage() //行为(方法)输出属性age

{

//注意如果这个地方重新定义一个 age  那么下面的age 为  函数内部定义的age

System.out.println("年龄为"+age);

}

}

对象:对象是由类产生的,要实现类的属性和行为(方法),就必须创建具体的对象

person p1=new person  ;

//创建一个对象p1 ,p1有age属性及 showage()方法;

//创建对象后就可以用 对象名.对象属性 的格式访问 

// 如 p1.age p1.showage();

//每一次的new 都是一个新的对象


对象的比较:==与equals()  

== 比较两个变量的值是否相等;

equals() 比较两个对象的内容是否一致

如:String s1= new String("abc")  //创建 String 类型的s1  值为 abc

String s2= new String("abc")  //创建 String 类型的s2  值为 abc

String s3= s1// 对象 s3 引用 s1

s1==s2   flase//s1 s2  两个对象

s1==s3  true   //s3引用的s1

s1.equals(s2)  true //  内容一致

s1.equals(s3)  true //  对象 s3 引用 s1  


匿名对象: new person().showage(); //没有使用new 创建对象直接调用 showage()方法

    使用:1、对象只需要执行一次方法的时候;2、作为参数传递给一个函数时可以使用


封装:为了保护类的成员属性不收外界的随意修改; 如age  需要使用私有 private ,private int age  这样 age 外面就访问不了 只能类内部成员访问;public全局访问

封装目的:隐藏类的实现细节;只能通过事先定制好的方法来访问;便于修改增强可维护性;可进行数据检查 


构造函数:每一个类中都有一个与之相同的函数(方法),这个函数就是构造函数,它可以为类的成员变量进行初始化工作,对象产生时就执行构造函数,如果不定义就自动生成一个空的构造函数;特征:与类名相同;没有返回值(不能使用return)

构造函数可以有多个但 参数不能相同(重载),默认的构造函数没有参数,没有任何代码,

构造函数的参数与调用的参数必须一致 ,否则出错,构造函数可以有多个 参数类型需不同


This:用于引用另外一个对象的成员,同类成员前可不加this

class A
{
String name;
public A(String x)
{
name=x;
}
public void func1()
{
System.out.println("func1 of "+name+" is calling");
}
public void func2()
{
A a2=new A("a2");
this.func1(); //这里加不加this 是一个效果,因为在同类中 
a2.func1();
}


class demo 
{
public static void main(String[] args) 
{
A a1=new A("a1");
a1.func2();
//System.out.println("Hello World!");
}
}

输出结果:

func1 of a1 is calling  //  这句是a1.func2();   this.func1()输出 

func1 of a2 is calling // 这句是func2 语句中a2.func1 的输出


垃圾回收:简单理解就是程序在运行中会产生一些数据和对象,使用完成后就成为垃圾,(过河拆桥啊)

class A
{
public void finalize()   //finalize() 垃圾回收执行语句
{
System.out.println("going");
}



class demo 
{
public static void main(String[] args) 
{

new A();
System.gc();  //强制启动垃圾回收器
}
}


函数的参数传递:注意全局变量和局部变量的区别  局部与全局不能相互影响。


static:静态变量   static String country="中国"

class A
{
static String country="中国";



class demo 
{
public static void main(String[] args) 
{
A a= new A();
A b= new A();
System.out.println(a.country);
System.out.println(b.country);
a.country="China";
System.out.println(a.country);
System.out.println(b.country);


}
}

输出结果:

中国

中国

china

China

注意:static  定义的变量 改变则全部改变,正常情况下定义static 后就不需要改变


静态方法 静态方法可以直接使用 类名.成员 的格式   

静态代码块 类被载入时,静态代码块被执行,且只被执行一次,经常用于类属性的初始化,

static { System.out.println ("静态代码块,只被执行一次哦");}


内部类:在类中也可以定义类  内部类可以通过创建对象从外部类之外被调用,需将内部类声明为public