1.何为对象
我们把自己的女朋友比作一个对象。那么我们是以何种方式来介绍自己的女朋友呢?换言之,我们在给亲戚朋友介绍女朋友时,会从哪些方面开始呢?如果你想通了这个问题,那么对象这个问题就很简单了。
通常,我们会介绍女朋友的特征,比如身高,体重,学历,年龄,籍贯,家庭背景等等…而另一个方面就是女朋友会干什么,也就是功能吧。举个栗子:我的女朋友会跳舞,会做饭,还会唱歌…
那么java中就是把女朋友这个“对象”的特征以及功能通过用一个类来对所有的女朋友“对象”进行描述,这里就涉及到面向对象的一个特点:抽象
抽象就是把某一类事物拥有的共性内容抽取出来形成一个类的过程。类是创建对象的模板
假如我想构建一个心中的女朋友:
name:张璇
height:165cm
weight:43kg
age:20
然后我的女朋友还有一些功能:
会跳舞,会唱歌,还会做饭
package Review.Objcet;
public class GirlFriend {
/*name:张璇
height:165cm
weight:43kg
age:20*/
String name;
int height;
int weight;
int age;
public void dancing() {
System.out.println(name+"会跳舞");
}
public void singing() {
System.out.println(name+"会唱歌");
}
public void cooking() {
System.out.println(name+"会做饭");
}
}
通过上面的代码,就创建了一个自己心里中的女朋友
下面有个小练习:
创建一台具体的电脑对象
要求:
①抽取所有电脑的共性内容(属性、功能)
属性:颜色、尺寸、品牌、价格、性格
功能:palygame、calculate、study
②创建一个class去描述对象共性内容
③通过class new一个具体的对象(给属性赋值)
④给这个对象属性赋值
⑤通过这个对象获取对象属性和功能
2.实例变量
全局变量/实例变量/属性:定义在类中的变量。
(1)一个实例也就是一个对象。
(2)全局变量的作用域在整个类中,类中的方法可以直接调用全局变量。
(3)当全局变量跟局部变量发生命名冲突时,局部变量优先(就近原则–程序运行时最近的)。
(4)全局变量有默认值,默认值都是“0”,和数组默认值一致。
public void dancing() {
String name = "xuanxuan";
System.out.println(name+"会跳舞");
}
public void cooking() {
System.out.println(name+"会做饭");
}
测试类:
package Review.Objcet;
public class GirlFriendTest {
public static void main(String[] args) {
// 通过new关键字创建一个对象
GirlFriend xx = new GirlFriend();
xx.dancing();
xx.cooking();
}
}
运行结果:
xuanxuan会跳舞
null会做饭
3.重载方法/方法重载(overloading)
前提条件:在同一个类中
概念:如果方法名相同,参数列表不同(类型、个数、顺序)这样的多个方法叫重载方法。
方法重载的原因:对于完成同一个功能,可能会有不同的条件,则方法的实现过程不一样,为了满足或方便开发者对不同业务的扩展,所以就出现了方法重载。
然而在调用过程中,我们可以根据重载方法的参数列表来调用对应的重载方法。判断一个方法是否为重载方法只跟方法的参数列表有关,跟方法的返回值类型无关。
public void dancing() {
String name = "xuanxuan";
System.out.println(name+"会跳舞");
}
public void dancing(boolean time) {
if(time = true) {
System.out.println(name+"这个女朋友有时间去跳舞");
}else {
System.out.println(name+"这个女朋友没有时间去跳舞");
}
}
另外需要注意一个就是方法重载的作用:
package Review.Objcet;
public class overLoading {
// 12306
public void buyTicket(String name,String password) {
ticketServer();
}
// transtation
public void buyTicket(String id) {
ticketServer();
}
// trainwindow
public void buyTicket(String id, int money) {
ticketServer();
}
// 核心出票系统
public void ticketServer() {
System.out.println("真正的出票系统");
}
}
上面是一个购买火车票的一个简单代码。在我们日常生活中,购买火车票的途径有很多,但是在代码实现上就是用方法重载来实现这个功能的,对于同样的购票功能,重载方法可以给用户提供多个入口,站在用户的体验上,这样就方便很多。
4.构造方法/构造器/构造函数
1)语法
在一个类中,构造方法的方法名就是类名,无返回值类型,访问修饰符为public,即为默认的构造方法。
2)注意
①一个类创建时就有一个默认的构造方法(public、无返回值类型无参)。
②当显示定义一个构造方法后,默认的构造方法会失效。
③构造方法在创建对象时会“自动”调用,当前对象使用过程中只调用一次。
④构造方法是可以被重载的(重载的构造方法),可以通过重载的构造方法去创建不同的同一类对象。
3)作用
在构造对象的同时给属性进行初始化(给属性赋值)。可以根据不同对象的初始化属性来定义重载构造方法以满足不同对象创建需求。
package Review.Objcet;
public class Constructors {
String name;
int size;
String color;
Constructors() {
System.out.println("---Constructors()---");
}
Constructors(String name) {
this.name = name;
System.out.println("---Constructors("+name+")---");
}
Constructors(String name,int size) {
this.name = name;
this.size = size;
System.out.println("---Constructors("+name+",size="+size+")---");
}
Constructors(String name,int size,String color) {
this.name = name;
this.size = size;
this.color = color;
System.out.println("---Constructors("+name+",size="+size+",color="+color+")---");
}
}
测试类:
package Review.Objcet;
public class ConstructorsTest {
public static void main(String[] args) {
Constructors c = new Constructors("第一个重载的构造方法");
Constructors c1 = new Constructors("第二个重载的构造方法", 20);
Constructors c2 = new Constructors("第三个重载的构造方法", 2, "black");
}
}
运行结果:
—Constructors(第一个重载的构造方法)—
—Constructors(第二个重载的构造方法,size=20)—
—Constructors(第三个重载的构造方法,size=2,color=black)—
5.对象的引用
创建一个类的对象时,对象名存放的是当前对象的引用地址
1)值传递和引用传递
传递可以简单理解为拷贝,即把内容全部复制一份进行赋值。
①基本数据类型之间的赋值
只会把类型的值进行拷贝,把拷贝的值进行赋值,赋值后两个变量无任何关系。
②对象类型之间的赋值
对象之间的赋值就存在地址引用的重新引用,不会把对象拷贝一份进行赋值。
java支持值传递,不支持引用传递
6.this关键字
1)this代表当前对象,是一个对象的引用
2)一个类中的所有普通属性和普通方法是属于对象的,并不是属于类的,如果要调用类中的属性或方法,需要创建一个当前类的对象,通过对象去调用。
3)构造方法中使用this
Constructors(String name,int size,String color) {
this.name = name;
this.size = size;
this.color = color;
System.out.println("---Constructors("+name+",size="+size+",color="+color+")---");
}