面向对象

面向对象

在这里插入图片描述
生活举例
在这里插入图片描述

对数组按格式输出 :

首先使用面向过程的思想,每一个步骤细节都得亲自处理。

public  static void printarray(int array[]) {
		System.out.print("[");
		for (int i = 0;i< array.length;i++) {
			if( i == array.length - 1 ) {			System.out.print(array[i]+"]");
			}else {
			System.out.print(array[i]+", ");
		}

使用面向对象的思想,达到同样的效果。
在JDK中已经提供好了一个工具,叫做Arrays
通过这个工具就可以将数组转换成指定格式字符串。

String str = Arrays.toString(array);
System.out.println(str);


System.out.println(Arrays.toString(arrar));
//我自己不做,找Arrays将数组转换成指定格式的字符串。

在这里插入图片描述
类的定义:
类是用来模拟现实事物的代码手段,事物分成属性,行为两个部分,类当中也对应地包含两个部分:
1.成员变量(属性):将变量位置直接定义在类中,在方法外,即为成员变量。
2.成员方法(行为):将普通的方法去掉static关键字,即为成员方法。

定义一个类,用来描述现实事物”学生“。

两个组成部分:
成员变量 (属性);
String name;//姓名
int age;//年龄
成员方法(行为);
public void eat(){}//吃饭
public void sleep
public void study

public  class   Student{
  String name;
  int  age;
 //成员变量

public void  eat(){

]

public  void  sleep(){

}

public  void  study(){

} 
//定义成员方法

}

如何根据类创建对象呢? 格式:
类名称 对象名 = new 类名称();

public static void main(String[] args){

   Student  stu1 = new  Student();
   Student  stu2 = new Student();//创建更多学生对象
   Student stu3 = new Student();

}

使用对象中的成员变量
格式:
对象名.成员变量名
注意:
对于成员变量名,如果没有赋值则有一个默认值

public static void main(String[] args){
    Student stu = new Student();
    stu.name =
    stu. age =

}

使用对象中的成员方法?
格式:
对象名.成员方法名(参数);`

public static void main(String[] args){
    Student stu = new Student();
    stu.eat;
    stu. sleep ;

如何使用定义好的类?

类就是一种引用数据类型,使用起来可以分成三个步骤:
1.导包
如果需要使用的目标类,和当前类(含有main方法)位于同一个包下的,那么可以省略导包不写。否则需要使用import导包语句。

2.创建
类名称 对象名 = new 类名称

3.使用
使用成员变量:
对象名.成员变量名
使用成员方法:
对象名.成员方法名(参数)

内存图 :两个对象

在这里插入图片描述
内存图:同一个对象
在这里插入图片描述
对比局部变量和成员变量的不同:

1.定义的位置不同 【重点】
局部变量;定义在方法内部
成员变量:直接定义在类当中,在方法的外面
2.内存中的位置不一样
局部变量:在栈内存中,stack
成员变量:在堆内存中,Heap
3.生命周期不一样
局部变量:随着方法的进栈而出现,随着方法的出栈而消失
成员变量:随着对象被创建而出现,随着对象被jvm回收而消失。
4.默认值不一样【重点】
局部变量:没有默认值,必须赋值后才能使用。
成员变量:如果没有赋值,那么会有一个默认值。

定义person时 其中的age年龄不应该为负数,但是却无法控制它的取值范围,数据不安全。

解决方案 :使用private关键字
一旦使用private关键字进行了修饰,那么超出本类范围之外,就不能直接访问了。
如果需要使用private修饰的成员变量,可以使用”间接访问“;
为private成员变量编写一对儿SetterGetter方法 。

当局部变量和成员变量重名的时候,方法当中会根据”就近原则“使用局部变量。
如果希望区分 就需要使用格式。
this.成员变量名

this关键字的经典作用:将重名的成员变量和局部变量分开。

this关键字代表”当前对象“。
通过谁调用的方法 ,谁就是this

构造方法定义格式:

构造方法就是专门用来创建对象的方法。当通过new关键字创建对象时,其实就是在调用构造方法。

如何定义一个构造方法,格式:
public 构造方法名 (参数类型 参数名称){
方法体
return;
}
调用构造方法的格式就是创建对象的格式;
new 类名称()

注意:
1.构造方法不能写返回值,连void都不写
2.构造方法的名称必须和所在的类名完全一样,连大小写也要一样

3.构造方法也可以进行重载。
4.构造方法如果没有自定义,那么将会默认赠送一个无参数,如果自定义了至少一个,那么就不再赠送默认的。

如何定义一个”标准的类“?

1.所有的成员变量都需要使用private关键字私有化;
2.为每一个成员变量编写一对儿Getter Setter方法
3。编写一个无参数的构造方法
4.编写一个全参数的构造方法。

如果是基本数据类型当中的boolean值,那么setxxx规则不变,而getxxx需要写成isxxx的形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值