面向对象编程(中)

1.构造方法
定义:方法名称和类名一致,不能有void,也不能有return,构造方法还不能被
static ,
作用:
创建对象
对成员变量进行初始化.
语法:
[访问修饰符] 类名(){
}
分类:
一、无参数的构造方法
step1:显示的无参数的构造方法
step2:隐式的无参数的构造方法
注意:如果一个类中,没有提供任何形式的构造方法,那么jvm会为当前
类,提供一个无参数的隐式的构造方法。
二、有参数的构造方法
注意:当调用有参数的构造方法,创建对象时,传递的实际参数要和形式参数类型和顺序相匹配。
一个类中可以有多个构造方法:如果类中有一个自己编写的构造方法时,编译器就不会为我们再提供那个默认构造方法。此时又希望还可以用默认构造方法来创建类的实例时,那就必须在类中明确添加这个默认构造方法。
注意:在任何没有被static修饰的方法中,都可以直接使用成员变量。

示例1:

/**
构造方法 给成员变量初始化
*/
public class Test1{
String name;
int age;
public Test1(){
name="zhangsan";
age=20;
}
public static void main(String[]args){
Test1 t=new Test1();
System.out.println(t.name+t.age);
}
}

示例2:

/**
隐式的无参数的构造方法
*/
public class Test2{
String name;
public void display(){
System.out.println("ok");
}
public static void main(String[]args){
Test2 t=new Test2();
t.name="zhangsan";
System.out.println(t.name);
t.display();
}
}

示例3:

/**
多个构造方法 示例
*/
public class Test3{
String name;
int age;
public void display(){
System.out.println("ok");
}
public Test3(String s,int a){
name=s;
age=a;
}
public Test3(){
name="王五";
age=28;
}
public Test3(int a){
age=a;
}
public static void main(String[]args){
Test3 t=new Test3("lisi",20);
System.out.println(t.name+t.age);
Test3 t1=new Test3();
System.out.println(t1.name+t1.age);
Test3 t2=new Test3(20);
System.out.println(t2.age);
}
}


2.多态
定义:同一种事物,在不同的环境下,有不同的展现方式。
多态的表现形式:
方法重载
方法重写
方法重载:
同一个类中,有多个方法名称相同,但是参数列表不同(参数个数,类型,顺序的不同)这就是方法的重载。
注意:类中定义的普通方法、构造方法都可以重载。
返回值类型不同不算重载!!!(条件:其他条件都一致)

示例:

/**
方法重载  示例
*/
public class Test4{
public void display(){
System.out.println("无参数的方法");
}
public void display(int num){
System.out.println(num);
}
public void display(int num1,int num2){
System.out.println(num1+num2);
}
public void display(String s,int num){
System.out.println(s+num);
}
public void display(int num,String s){
System.out.println(num+s);
}
public static void main(String[]args){
Test4 t=new Test4();
t.display(10,"20");
}
}


3.this关键字
在类中每个非静态方法中(也就是没有被static修饰的方法中),实际上都隐含着
一个this的对调用当前方法对象的引用。
作用:this可以看作当前类的某个对象。
当方法中的局部变量和成员变量一致时,以局部变量为主。
用法一:
当类中某个非静态方法的参数名跟类的某个成员变量名相同时,为了避免参数的 作用范围覆盖了成员变量的作用范围,必须明确地使用this关键字来指定成员变量.
(用this关键字区分成员变量和方法中的参数名称)
用法二:
当类中构造方法的第一句代码是this(参数列表)的形式出现,表示该构造方法调用了当前类中,其它的构造方法。
注意:this关键字只能在没有被static修饰的方法中使用。

示例:

/**
this关键字  示例
*/
public class Test5{
String name;
int age;
public Test5(String name,int age){
this.name=name;
this.age=age;
}
public Test5(){
this("张三",29);
}
public void display(){
String name="王五";
System.out.println(name+age);
System.out.println(this.name+this.age);
}
public static void main(String[]args){
Test5 t=new Test5("李四",20);
t.display();
Test5 t2=new Test5();
System.out.println(t2.name+t2.age);
}
}


4.代码执行的顺序
代码在执行期间,以main方法开始,并且以main方法结束。

注意:普通方法之间的调用,直接写:方法名称(参数列表)。

示例:

/**
代码执行的顺序
*/
public class Test6{
public void display(){
System.out.println("方法1");
display2();
System.out.println("ok");
}
public void display2(){
System.out.println("方法2");
}
public static void main(String[]args){
Test6 t=new Test6();
t.display();
System.out.println("over!");
}
}


5.方法中参数的传递
1.在Java中进行参数传递时,无论基本数据类型还是引用数据类型都是采用的传值的方式。(所谓的传值:就是指传递的是具体的数据,只是数据的表现形式不一样)。
2.基本数据类型进行参数传递时,传递的是数据的本身。
基本数据类型在进行参数传递时,实际上传递的是本身的副本。
3.引用数据类型进行参数传递时,传递的是对象所在的内存地址。

示例1:

/**
基本数据类型 参数的传递
*/
public class Test7{
public void display(int x){
System.out.println("x传递过来的值是:"+x);
x=1000;
System.out.println("x重新赋值后是:"+x);
}
public static void main(String[]args){
Test7 t=new Test7();
int x=100;
System.out.println("在调用display方法之前x的值是:"+x);
t.display(x);
System.out.println("在调用完display方法之后x的值是:"+x);
}
}

示例2:

/**
引用类型参数的传递
*/
import java.util.Arrays;
public class Test8{
public void display(int[]num){
System.out.println("num的值是:");
for(int a:num){
System.out.println(a);
}
Arrays.sort(num);
System.out.println("排序以后数组的值是:");
for(int a:num){
System.out.println("-->"+a);
}
}
public static void main(String[]args){
int[]num={5,10,2,30,4,100,1};
Test8 t=new Test8();
System.out.println("在调用display方法之前数组num的值是:");
for(int a:num){
System.out.print(a+" ");
}
t.display(num);
System.out.println("在调用完display方法之后数组num的值是:");
for(int a:num){
System.out.println("****>"+a);
}
}
}

示例3:

/**
引用类型参数传递 示例2
*/
public class Test9{
String name;
public void display(Test9 t){
t.name="lisi";
}
public static void main(String[]args){
Test9 t=new Test9();
t.name="张三";
//System.out.println(t.name);
//t.display(t);
//System.out.println(t.name);
Test10 t0=new Test10();
t0.display(t);
System.out.println(t.name);
}
}
class Test10{
public void display(Test9 t){
t.name="王五";
}
}

综合例题:

/**
封装一个学生(Student)类:
学生应该有姓名(name)、年龄(age)、性别(sex),班级号(classNum),座位号(sno)。
提供一个参数化构造化方法以便能很方便的创建一个学生对象。
提供一个方法(displayInfo())用来显示这个学生的姓名、年龄、性别、所在的班级和他的座位号。
写一个main方法创建两个学生对象,分别调用displayInfo()方法显示各自的信息。
*/
public class Student{
String name;
int age;
String gender;
String classNum;
String sno;
public Student(String s,int a,String g,String c,String sn){
name=s;
age=a;
gender=g;
classNum=c;
sno=sn;
}
public void displayInfo(){
System.out.println(name+age+gender+classNum+sno);
}
public static void main(String[]args){
Student stu1=new Student("张三",20,"男","java2014","110");
Student stu2=new Student("李四",22,"女","java2015","120");
stu1.displayInfo();
stu2.displayInfo();
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值