类是模子,确定对象会拥有的特征(属性)和行为(方法),类的特点:类是对象的类型,具有相同属性和方法的一组对象的集合。对象是类的实例,什么是对象的属性?属性是对象拥有的各种特征;每个对象的每个属性都拥有特定值,对象的方法也就是对象执行的操作。类是抽象的概念,仅仅是模板,客观不存在。而对象是你可以看得到摸得到的具体实体,客观存在。
定义类
1、类的重要性:所有的JAVA程序都以类class为组织单元;
2、什么是类:类是模子,确定对象会拥有的特征(属性)和行为(方法);
3、类的组成:属性和方法;
4、定义一个类的步骤:
a.定义类名 public class 类名{}
b.编写类的属性 //定义属性部分,可以从属性1—属性n,也可以没有
c.编写类的方法 //定义方法部分,可以从方法1—方法n,也可以没有。
使用对象的步骤:
1、创建对象 Telphone phone=new Telphone();phone对象就是Telphone类型的。类名 对象名=new 类名(); 这个语法就是对象的实例化。
2、通过对象名来使用这个对象,引用对象的属性:对象.属性,可以引用赋值;对象.属性=xx;对象.方法名,调用方法。类是以代码形式保存在文件当中,当我把文件信息放在内存中,这些信息的集合我们就把它称为对象,这个过程我们就叫做实例化。Telphone phone=new Telphone();把对象赋给了对象名这个变量,实际phone这个变量名只是指向了这个对象的空间地址。new 一个类名加上小括号() 这就是实例化,然后赋给某个变量名,变量的类型就是对象的类型,即所属类这个类型。刚创建对象时如果没有给属性赋值,则是默认值,通常使用对象会用两个操作,即给实例变量赋值,或者调用对象的方法。
设计银行项目中的注册银行用户基本信息的类,包括账户卡号、姓名、身份证号、联系电话、家庭住址。
要求:是一个标准Java类(数据私有,提供seter/getter),然后提供一个toString方法打印该银行用户的信息。
代码:
import java.util.Scanner;
public class triangle {//声明类中的变量,账号,姓名,身份证号,电话,地址
int number;
String name;
String id;
int Telephone;
String address;
public triangle(int number,String name,String id,int Telephone,String address){//构造方法给变量赋值
this.number=number;
this.name=name;
this.id=id;
this.Telephone=Telephone;
this.address=address;
}
static void toString(int number,String name,String id,int Telephone,String address){//此函数用作打印数据
System.out.println("卡号是:"+number);
System.out.println("姓名是:"+name);
System.out.println("身份证号是:"+id);
System.out.println("电话是:"+Telephone);
System.out.println("家庭住址:"+address);
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);//输入数据
int number=sc.nextInt();
String name=sc.next();
String id=sc.next();
int Telephone=sc.nextInt();
String address=sc.next();
triangle t=new triangle(number,name,id,Telephone,address);//初始化
toString(t.number,t.name,t.id,t.Telephone,t.address);//打印
}
}
运行结果如下:
首先我们需要知道this代表什么?
this关键字代表本类,例如Class Student
类中的this即代表Student,另外要注意一点,this关键字只能在方法内使用,方法外使用是编译不通过的!!!
用法一:this.属性名
this表示当前类,this.属性名可以给当前类的属性赋值,可以在本类中除静态方法外的任何方法(包括构造器、私有方法)中使用,这里要注意static的特性(1.遵循静态调用 2·stati关键字不能与this、super关键字共用)。
另外,若本类成员变量与方法内局部变量同名,this.属性名代表的是什么呢??
当然是局部变量了,因为Java遵循就近原则,通俗地讲,就是谁离我近,我就代表谁。
代码实现:
class Student{
String name;
public void hello(){
this.name=name;
}
}
用法二:this.方法
这里比较好理解,this代表本类,this.方法即调用方法,除了静态方法中不可使用,本类其他方法包括私有方法均可使用此格式调用其他方法,只是我们通常省略this关键字。
代码实现:
class Student{
String name;
public void hello(){
this.name=name;
}
// this.name=name;this需要在方法内使用
public void hi(){
this.hello();
hello();
he();
}
private void he(){
this.name=name;
hello();
this.he();
}
}
用法三:this()
此格式用于构造器内,比如我们可以在无参构造内调用含参构造,那么这时候就需要在this()传入参数来实现,同理要想在含参构造内调用无参构造,只需在构造器代码第一行写this()即可,但是注意,this()与this(参数列表)不可同时使用!
代码实现:
public Student(){
this("name");
this.name=name;
this.he();
}
public Student(String name){
// this();两个this不能一起使用
}
注意:
static void play(){
// this.name=name;静态不能调用非静态
}
set 或者 get ,有一定的用处,但实际使用时,还是要根据上下文,根据模块,来决定数据的修改和获取,不应当过于依赖set或get。
1.set:在OO当中,变量最好都是private,防止被误操作,那么如何修改private的变量呢? 写一个函数,专门针对private变量,每当想要修改这个变量的时候,就调用这个set函数。
2.get:既然这个变量是private,那么外部无法获取这个变量的值了,所以,再写一个函数,专门用于返回这个变量的值,然后在类的外部,就可以随意得到这个private的变量的值。
}
在其他类继承这些私有数据的时候,更新时可以加一些判断条件:
举个栗子:
class Persion//声明变量
{
private String name;
private String idStr;
public Persion(){}
//注意构造方法不需要加返回类型
public Persion(String name, String idStr)
{
this.name = name;
this.idStr = idStr;
}
//setter和getter方法 注意返回类型
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setIdStr(String idStr)
{
idStr = idStr;
}
public String getIdStr()
{
return idStr;
}
//重写equals方法,提供自定义的相等标准
public boolean equals(Object obj)
{
//只有当obj是persion对象
if(obj != null && obj instanceof Persion)
{
Persion persionObj = (Persion)obj;
//并且当前对象的IdStr与obj对象的IdStr相等才可判断两者相等
if (this.getIdStr().equals(persionObj.getIdStr()))
{
return true;
}
}
return false;
}
}
public class OverideEqualsRight
{
public static void main(String[] args)
{
Persion p1 = new Persion("孙悟空", "123456");
Persion p2 = new Persion("孙行者", "123456");
Persion p3 = new Persion("孙悟饭", "1234");
//p1和p2的IdStr相等所以输出true
System.out.println("p1是否等于p2:" + p1.equals(p2));
//p1和p3的idStr不相等所以输出false
System.out.println("p1是否等于p3:" + p1.equals(p3));
}
}