1类和对象
1.1面向对象和面向过程
面向过程:是以流程为中心的编程思想,实现功能的每一步都是自己实现的。
面向对象:是以对象为中心的编程思想,通过指挥对象来实现所需要的功能。
面向过程存在的问题:
1.1.1面向对象过程
面向对象过程:面向对象的开发过程其实就是不断地创建对象、使用对象、指挥对象做事情的过程,是建立在面向过程的基础上,就是把任何一个事物看作是一个整体,从事物的特征(属性)和行为(方法、功能)两个方面进行描述。
特征:抽象、封装、继承、多态。
如果说三大特征的话抽象可以省略。所以面向对象所学的就是这几个特征。
1.1.2类和对象的关系
理解:只要是客观存在的事物皆可称之为对象,Java中爱说:"万事万物皆对象"。
类的理解:
- 类是对现实生活中一类具有相同属性和行为的事物的抽象。
- 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合。
- 简单来说,类就是对现实事物的一种描述。
类的组成:
- 属性:事物的特征,例如手机(品牌、尺寸、价格)。
- 行为:事物的执行的行为,例如(打电话、发信息)。
类和对象的关系:
- 类:类是对现实生活中具有共同属性和方法的事物的抽象。
- 对象:能够看得见摸得着的一种真是存在的事物。
什么是对象:
理解:具体存在的一个事物。
特点:
- 无论两个事物多么的接近,特征和行为是多么的相似不可以说是同一个对象,仍是两个对象。
- 一项法律法规也是一个对象。
2.抽象
理解:把同一类事物的属性(特征)和方法(行为)进行抽象、归纳、总结。
3.封装
- 就是包装的意思,为了保证抽象出来数据的安全性。
-
封装包括对属性和方法的封装,而且同一类事物要把它们的属性和方法封装到一起,这才是一个完整的封装。
-
封装不是绝对的,如果需要访问封装起来的属性和方法,就必须通过指定的公共入口 ( 方法、接口 ) 。
-
抽象和封装都是概念性的,在程序中它们都需要代码的形式来体现,这就是类 (class)。
3.1类的定义(类的设计)
类的组成:是由属性(特征)和方法(行为)组成,类是由类声明和类体构成。
属性::就是变量,也称为属性。
行为:就是new的对象,也称为方法
格式:
class 类名{
//成员变量
//方法
}
理解:
class是定义类的关键字,"class 类名"是类的声明,类的{}中的内容是类体。类体中的内容是由成员变量和方法(普通方法)(构造方法)组成。
-
成员属性或者全局变量:就是在类中任何方法或者代码块外部定义的变量,整个类中都可以使用。成员变量,都有默认值,会根据数据类型来决定。
-
局部属性或者局部变量:就是在方法或者代码块内部定义的变量,只能在方法内部或者代码块内部使用,而且局部变量必须要初始化了才能使用。
4.对象的创建
理解:创建对象的过程成为类的实例化,最常见的创建对象的方式是使用new运算符。创建对象的过程包含对象分配存储空间,为成员变量赋初始化值和调用构造方法。
- 类是对对象的抽象,对象是类的实例化 。
- 一个类可以创建多个对象,但是对象名不能一致。
- 可以通过对象来调用方法和属性。
类名 对象名 = new 类名();
byte d;
int a;
double b;
String name;
char c;
boolean tomp;
public static void main(String[] args) {
KE4 ke4= new KE4();
System.out.println(ke4.d+" "+ke4.a+" "+ke4.b+" "+ke4.name+" "+ke4.c+" "+ke4.tomp);
System.out.println("输出每个类型的默认值");
}
4.1构造方法
构造方法特点:
- 构造方法没有返回值。
- 构造方法的方法名必须和类名相同。
- 构造方法不能被static关键字修饰。
类名 对象名=new 构造方法(参数列表);
格式:
访问修饰符 类名(参数列表){
}
作用:可以对成员属性进行初始化。
4.1.1构造方法分类
- 无参数的构造方法:隐式无参的构造方法、显示无参的构造方法。
-
有参数的构造方法,在调用时,需要传递数据,而且数据要和构造方法中参数的类型,个数、顺序必须完全匹配。
-
构造方法中的参数,有被称为形式参数 ( 形参 ) ,在调用这个构造方法时,传递的数据称为实际参数(实参 )。
- 在一个类中,可以同时拥有多个构造方法,只要构造方法之间的参数列表不同即可。
示例:
public class Demo2{
public Demo2(){
System.out.println("------无参数的构造方法------");
}
public Demo2(String name,int age){
System.out.println("------有参数的构造方法----- name="+name+", age="+age);
}
public Demo2(int a,int b){
System.out.println("------有参数的构造方法----- a="+a+", b="+b);
}
public static void main(String[]args){
Demo2 demo2=new Demo2("zhangsan",20);
}
}
4.1.2方法
格式:
访问修饰符 返回值 (参数列表){
//返回值
return 返回值;//切记返回值只能有一个
}
方法分为四种:
- 无返回值无参数
- 无返回值有参数
- 有返回值无参数
- 有返回值有参数
命名格式:
//无返回值无参数
访问修饰符 void 方法名 (){}说明 : void 表示当前方法不会返回数据给调用方
//无返回值有参数访问修饰符 void 方法名 ( 数据类型 参数 1, 数据类型 参数 2,...){}说明:方法中的参数可以有多个,参数之间使用逗号分隔。方法中的参数也称为形式参数 ( 形参 )调用有参数的方法时,传递的数据称为实际参数 ( 实参 ) ,在传递数据时,必须和目标方法中参数的个数,类型,顺序完全一致。
//有返回值无参数
访问修饰符 返回值类型 方法名 (){// 代码// 返回值return 值 ;}说明:返回值类型由返回值来决定的带有返回值的方法的最后一句代码,一定是: return 返回值 ; 而且一次只能返回一个值。
//有返回值有参数
[ 访问修饰符 ] 返回值类型 方法名 ( 参数列表 ){// 最后一句代码return 返回值 ;}
示例:
public class KE5 {
//无返回值无参数
public void Diaplay1(){
System.out.println("=========无返回值无参数的普通方法===========");
}
//无返回值有参数
public void Diaplay2(int a,double b){
System.out.println("=========无返回值有参数====="+"a为:"+a+"b为:"+b);
}
//有返回值无参数
public int Diaplay3(){
System.out.println("=========有返回值无参数的普通方法=========");
return 100+200;
}
//有返回值有参数
public String Diaplay4(String name,int age,String ID){
return "姓名为:"+name+" 年龄为:"+age+" 身份证号为:"+ID;
}
public static void main(String[]args){
KE5 ke5=new KE5();
ke5.Diaplay1();
ke5.Diaplay2(800,400.12);
System.out.println(ke5.Diaplay3());//还有一种输出格式
int sum=ke5.Diaplay3();
System.out.println(sum);
System.out.println(ke5.Diaplay4("张三",24,"410522441233254"));
}
注意:如果有返回值的话,return必须放在方法最后.
4.1.3代码执行顺序
-
在 JavaSE 中, main 方法是程序的入口,所有普通的方法,都要在 main 方法中被调用才有机会得到运行;普通方法运行完毕后,再回到Main 方法,所以,程序从 Main 方法开始,也从 Main 方法结束。
-
普通方法之间的调用,直接写 方法名 ( 参数列表 ) 即可。
示例:
void text1(){
System.out.println("text1开始执行");
text2(500,600);
System.out.println("text1执行结束");
}
void text2(double a1,double a2){
System.out.println("text2开始执行");
System.out.println(a1+a2);
System.out.println("text2执行结束");
}
public static void main(String[]args){
KE5 ke5=new KE5();
ke5.text1();
System.out.println("程序执行结束,拜拜喽 我要去玩喽");
}
4.1.4this关键字
-
使用场景: this 关键字只能出现在没有被 static 修饰的方法中。
-
作用: this 关键字表示对当前类某个对象的引用(哪个对象调用这个方法, this 就指向谁)。
用法:
-
当方法中的局部变量或者参数和成员 ( 全局 ) 变量完全一致时,以局部变量或者参数为主 ( 就近原则 ) ;如果此时就想调用全局变量,则可以通过 this 关键字来解决,格式是: this. 属性名 。
-
当 this 以 this( 参数列表 ) 的形式,出现在 构造方法的第一句代码时 ,就表示当前构造方法,调用了该类中其它的构造方法,可以通过 this 的参数列表来匹配。
示例:
public class KE6 {
public static void main(String[] args) {
KE6 ke6=new KE6();
ke6.Display();
}
int num=999999;
void Display(){
int num=44444;
System.out.println("我是局部变量"+num);//要想输出全局变量的话 可以在num前面加上this关键字。
System.out.println("我是全局变量"+this.num);
}
KE6 (){
this("张三",25);
}
KE6(String name ,int age ){
System.out.println("姓名为:"+name+"年龄为:"+age);
}
}