面向对象
生活举例
对数组按格式输出 :
首先使用面向过程的思想,每一个步骤细节都得亲自处理。
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的形式。