类和对象1
什么是类?
类就是一类对象的统称。
例:自行车的设计图
什么是对象?
对象就是这一类具体化的实例。
例:一辆辆自行车
- 类在Java中属于引用类型
- 类中的元素称为:成员属性
- 类中的函数称为:成员方法
- 面向对象的三大特性: 封装、 继乘、多态
语法
定义类:
限定符(modifier) class 类名称{
1.属性/静态属性
2.方法/静态方法
3.构造方法(必须要有,如果没定义,默认补一个无参的构造方法)
}
举例 :
public class Person
{
public String name;
public int age;
public Person(String name,int age)
{
this.name = name ;
this.age = age ;
}
}
定义属性
限定符(modifier)变量类型 变量名称;
定义方法
//限定符(modifier) 返回值类型 方法名称 (形参列表)
{
//实现
}
public static int [] rotate(int []a,int k)
{
}
定义构造方法
限定符(modifier) 类名称 (形参列表)
{
}
构造方法:
- 方法名称必须与类名称相同
- 构造方法没有返回值类型声明
- 每一个类中一定至少存在一个构造方法
1)没有明确定义,则系统自动生成一个无参构造方法
2)如果一旦给出了构造方法,不再补默认构造方法;
创建对象的语法
类名称 对象名称 = new 类名称(实参列表); (引用类型-类引用)
对象(引用数据类型)必须在实例化后调用,否则会产NullPointerException (运行时错误),
编译时不会出错。
实例化对象的语法:
new 构造方法(实参列表)
1)new 关键字 计算对象内存大小,在堆中申请内存空间,把空间都初始化为0X0;
2)执行构造方法,对属性进行初始化;
3)把对象的引用赋值给一个引用变量,如果需要;
总结:
1.属性信息存放在堆区;
2.类信息存放在方法区
3.对象是存放在堆中的一块区域;
存储的最主要的就是属性的值,也可以找到方法区中对象相应的类的信息;
例:
/*1)计算对象需要的内存大小,开辟空间,初始化为0
p=malloc(sizeof (person)); memset(p,0x0,sizeof(person))
2)调用构造方法、对属性初始化
3)构造方法调用结束,返回一个指向新对象的引用
person tmp = 新的对象;
*/
class person
{
//一个源文件中只能有一个public类,该类的名称必须和文件名一样;
//一个类会生成一个class字节码文件
public String name =null;
public int gender =0;
public int age=0e;
public String toString()
{
return String.format("person(%s,%d %d),name,gender,age");
//String.format 按照字符串格式化输出
}
//构造方法 用来初始化属性值
public person (String n,int g,int a)
{
name = n;
gender=g;
age=a;
}
}
public class Course
{
public static void main(String [] args)
{
person p=new person("张三",2,4);
System.out .println(p.toString());
}
}
访问对象的属性或者调用对象的方法
- 如果在类的内部(在类的方法中访问类的属性和调用类的方法)
访问属性
this.属性
this.name
如果没有出现命名遮挡问题直接使用属性
name
调用方法
this.方法名称(实参列表)
this.toString();
方法名称(实参列表)
toString();
- 如果在类的外部(在其它类的方法中访问该类的属性和调用类的方法)
1)访问属性
对象的引用.属性名
调用方法
2)对象的引用.方法名称(实参列表)
//1.访问属性
Person p=new Person();
p.name;
//如果只调用一次可以使用匿名对象调用例:
new Person().name
//2.调用方法
Person p=new Person();
p.toString();
//如果只调用一次可以使用匿名对象调用例:
new Person().toString;
理解:
Person p = null;
定义了一个没有指向任何对象的Per son类型的引用(类类型的引用)
Person p = new Person(…);
1)定义了一个Person类型的对象;
2)定义了一个指向Person类型的对象的Person类型的引用(类类型的引用)
引用类型和指向类型是两回事;
3)p是一个Person类型的引用,指向一个Person类型的对象
this 关键字的使用
- this调用本类属性
通过this访问属性或方法(一般出现在发生了命名遮挡) - this调用本类方法
1)调用普通方法:this.方法名称(参数) ;
2)调用构造方法:this(参数);
3)在构造方法中调用其它构造方法,调用语句必须出现在第一行; - this表示当前对象
this 代表就是当前对象的引用
举例:
//1.通过this访问属性或方法(一般出现在发生了命名遮挡)
class Person()
{
String name;
//命名遮挡:在类方法中访问类的属性或方法,参数与类中属性同名时
public Person(String name)
{
name = this.name;
toString();//this.toString();
}
public String toString()
{
.................
}
}
//2.在构造方法中调用其它构造方法,调用语句必须出现在第一行;
class Person(
{
String name;
public Person(String n)
{
name =n;
}
public Person()
{
this ("陌生人");
//2)
//1) name ="陌生人";
}
}
//3.this 代表就是当前对象的引用
class Person
{
String name;
public Person(String name)
{
this.name =name;
}
public String toString()
{
return this.name;
}
public boolean equals(Person p)
{
return p.name = this.name;
}
public void test()
{
this.equals(this);
}
}