面向对象的三大特征:1、封装 2、继承 3、多态(面向对象就是对某个实例的单独操作)
类与对象
类是对某一类事物的描述,是抽象的概念上的定义,对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
一个类可以产生多个对象。
类的定义:
class person
{
int age; //成员变量
void shout() //成员函数
{
System.out.println("my age is "+age);
}
}
对象的使用
创建新的对象之后,我们就可以使用“对象名.对象成员”的格式来访问对象的成员(也包括属性和方法)。
class TestPerson
{
public static void main(String [] args)
{
Person p1=new Person(); //新建person对象
Person p2=new Person();
p1.age=-30;
p1.shout();
p2.shout();
}
}
对象的比较
“==”运算符(对对象的地址进行比较)与equals()方法(对对象的地址中存放的内容进行比较)
匿名对象 new Person().shout();
1、我们也可以不定对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象,如 new Person().shout();
2、如果对一个对象只需要进行依稀方法调用,那么久可以使用匿名对象。
3、我们经常将匿名对象作为实参传递给一个函数调用
例: public static void getSomeOne(Person p)
{
p.shout();
}
模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外部干预),弱耦合(提供给外部尽量少得方法调用)
一个类中的私有变量不可以让外部的类应用。
构造函数的定义与作用
注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了。
构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。
构造方法可以对类中的成员变量初始化,构造函数与类同名。
当程序中有 有参数的构造函数时,编译器就不会再自动产生不带参数的构造函数,当调用时就找不到不带参数的构造函数。
this是什么?
函数的参数传递:按引用传递(引用内存中存放数据的地址函数,函数内部的值发生变化,外部的值也发生变化)
按值传递(引用内存中存放数据,函数内部的值发生变化,外部的值不发生变化)
this引用句柄的应用
static 静态方法
3、 main() 方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。
static静态变量:当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。
可以通过类名来访问静态成员变量
例:class Chinese
{
static String country="中国";
String name;
int age;
void singOutCountry()
{
System.out.println(country);
}
}
class Testchinese
{
public static void main(String [] args)
{
System.out.println(Chinese.country);
Chinese ch1=new Chinese();
ch1.singOutCountry();
System.out.println(ch1.country);
}
}
main方法中的数组就是在运行类时传递进去的参数,参数之间用空格分开。
内部类 —在类中直接定义的内部类
例:
class Outer
{
private int size=10;
public class Inner
{
public void doStuff()
{
System.out.println(++size);
}
}
}
public class TestInner
{
public static void main( String[] args)
{
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.doStuff();
}
}
使用Java的文档注释