方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。方法用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
方法其实就是c++里的函数,只是声明格式有些不同
[修饰符1 修饰符2 ...] 返回值类型 方法名(形参列表){ Java语句;....... }
方法的调用方式∶
对象名.方法名(实参列表)
方法的详细说明:
1.形式参数∶在方法声明时用于接收外界传入的数据。
2.实参∶调用方法时实际传给方法的数据。
3.返回值:方法在执行完毕后返还给调用它的环境的数据。
4.返回值类型︰事先约定的返回值的数据类型,如无返回值,必须显示指定为为void。
代码示例如下:
package agoni; public class TestMethod { public static void main(String[]args) { TestMethod q = new TestMethod(); q.lwq();//普通方法要通过对象调用 System.out.println(Q(3,4));//静态方法可直接调用 } void lwq(){ System.out.println("我也想谈"); System.out.println("甜甜的"); System.out.println("恋爱"); } public static int Q(int a,int b) {//静态方法 int c; c=a+b; return c; } }
运行结果如下:
由于在C++中函数就是java里的方法,这里就不再深度总结了。
面向过程:面向过程思想思考问题时,我们首先思考“怎么按步骤实现?”并将步骤对应成方法,一步一步,最终完成,专注于过程。这个适合简单任务,不需要过多协作的情况下。比如,如何开车?需要一步步按照步骤来,不然就亲人两行泪了。
面向对象
面向对象:更契合人的思维模式。我们首先思考的是“怎么设计这个事物?”比如思考造车,我们会先像如何设计,而不是怎么按照步骤造车,那样就太麻烦了,面向对象则是从宏观的去考虑问题。
类就是拥有相等功能和相同的属性的对象的集合 ,对象就是类的实例。
public class Car { }//每个源文件必须有且仅有一个 public class ,而且类名必须与文件名一样 Class Type{//一个Java文件可定义多个类 } Class Engine{ } Class Seat { }
上面的类都是空类,里面没有任何信息,下面我们定义一个有信息的类
public class QH{ //属性(成员变量) int id; String name; int age; void study(){ System.out.println("我爱学习!") } //构造方法 QH(){ } }
类里面的信息通常有属性还有方法(C++里的函数)
属性:用于作用该类或该类对象包含的数据或者说静态特征属性作用范围是整个类体。在定义成员变量时可以对其初始化,如果不对其进行初始化,java使用默认的值对其初始化。
属性的定义格式:
[修饰符] 属性类型 属性名 = [默认值];
方法:跟C++中的函数本质一样。我也就不做多的叙述了。
用于对象的初始化
1.通过new关键字调用。
2.构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
3.如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。
4.构造器的方法名必须和类名一致。
实例如下:
package cn.QH.lwq; public class ConstructionMethod { public static void main(String[] args) { Q q = new Q(2020114689,"LWQ");//使用构造函数初始化对象 System.out.println(q.getName()+'\t'+q.getId());调用q的getName方法和getId方法输出name和id。 } } class Q{ int id; String name; Q(int i,String n){//构造函数 id = i; name = n; } public int getId() {//get函数返回id return id; } public String getName() {//get函数返回name return name; } }
运行结果如下:
对象创建的过程:
1.分配对象空间,并将对象成员变量初始化为0或空
2.执行属性值的显示初始化
3.执行构造方法
4.返回对象的地址给相关的变量
而this的本质就是“创建好的对象的地址”!由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象”
代码如下:
package cn.QH.lwq; public class TestThis { int a,b,c; TestThis(int a,int b) { this.a = a; this.b = b;//成员变量与局部变量名字相同,可通过this对成员变量赋值 } TestThis(int a,int b,int c){//重载构造方法 this(a,b);//调用重载前的构造方法对a,b进行初始化可用this调用 this.c=c; } void lll() { System.out.println(a); System.out.println(b); } void qqq() { this.lll();//调用本类中的sing()可用this调用 System.out.println("启航,永远的神"); } public static void main(String[] args) { TestThis a = new TestThis(3,4);//调用重载前的构造方法 a.qqq(); } }
运行结果如下:
这里呢,用写个代码对以上学的类与对象知识进行总结:
package agoni; public class TestClass { int id; String name; int age; phone A;//定义成员变量 static int count=0;定义静态变量 public TestClass(int a,String b,int c) {//构造方法 this.id = a; this.name = b; this.age = c;//用this指针进行赋值 count++; } protected void finalize()//析构 { System.out.println("对象清除"+'\n'+--count); } public void L(){ System.out.println("LWQ在用"+A.brand+"手机玩王者荣耀"); } public void Q() { System.out.println("QH,yyds"); } public static void main(String[]args) { TestClass lwq = new TestClass(2020214689,"LWQ",18);//定义对象lwq phone c1 =new phone();//定义对象c1 c1.brand ="nava 7pro";//对c1的成员变量进行赋值 lwq.A=c1;对lwq中的成员变量进行赋值 System.out.println(lwq.name); System.out.println(lwq.id); System.out.println(lwq.age); lwq.L(); lwq.Q(); lwq = null; System.gc(); } } class phone{ String brand; }
运行结果如下:
在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的声明周期和类相同,在整个应用程序执行期间都有效。可以说用它定义的变量和方法属于类本身。
package cn.QH.lwq; public class TestStatic { public static void main(String[]args) { Q1 q = new Q1(3,4); q.lwq(); Q1 l = new Q1(); l.lwq(); } } class Q1{ static int sum;//定义静态变量 int a,b; static void lwq(){//定义静态方法 System.out.println(sum); } Q1(){} Q1(int a ,int b) { sum=a+b; } }
运行结果如下:
可以看出,q对象和l对象里的sum相等,所以sum静态变量从属于类。
总结了方法,类与对象,static关键字等内容,走上了java面向对象学习的进程。