1.面向过程的编程思想
面向过程是以过程为基本单位,注重最后实现的功能。
缺点:
代码之间有很强的耦合度,不利于程序的维护和扩展。
2.面向对象编程的思想
就是把一个事物看作一个整体,从事物的属性(特征)和行为(功能/方法)两个方面进行描述,这就是面向对象的思想。
优点:
面向对象编程来源于生活,服务于生活。
面向对象的编程思想更加符合大多数人的正常思维逻辑。
面向对象的编程语言中都有设计模式。
在面向对象编程中肯定会用到面向过程的编程思想。
面向对象编程的四大特征:抽象,封装,继承,多态
3.对象
在现实生活中,真实存在的一个具体的事物就是一个对象。
万事万物,皆对象!!!
特点:
无轮两个事物有多么的相近或相似永远都是两个不同的对象。一项法律,法规,政策,规章制度都是一个对象。
4.抽象
把同一类事物它们共同的属性(特征)和行为(方法)进行抽取,归纳,总结,这就是抽象。
5.封装
封装其实就是包装,目的就是为了保护抽象出来的属性和方法。
封装包括两个方面的封装:
属性的封装
方法的封装
如果要访问封装的属性和方法,就必须要通过指定的公共接口或方法 进行访问。
在封装的过程中,属性和方法两者密不可分,相辅相成,才能封装一个完整的类。
抽象、封装具体的体现形式就是类。
6.类
类和对象的关系
类是对象的抽象,对象是类的实例化(就是一个具体的事物)。
/**
定义类
*/
public class Person{
String name;
int age;
String address;
String gender;
public Person(){
name="王五";
age=40;
address="北京";
gender="男";
}
public Person(int num){
}
public Person(String n){
name=n;
}
public void speak(){
System.out.println("人类能说话");
}
public void speak2(int num){
System.out.println(num);
}
public int speak3(){
return 10*10;
}
public static void main(String[]args){
//创建一个对象
Person p=new Person();
p.name="张三";
p.age=20;
p.address="天津";
p.gender="男";
p.speak();
System.out.println(p.name+"\t"+p.age+"\t"+p.address+"\t"+p.gender);
Person p2=new Person();
System.out.println(p2.name+"\t"+p2.age+"\t"+p2.address+"\t"+p2.gender);
p2.speak2(2000);
int num3=p2.speak3();
System.out.println(p2.speak3());
Person p3=new Person("李四");
System.out.println(p3.name);
}
}
7.方法
step1:无参数无返回值的方法
语法:
[访问修饰符] void 方法名称(){
//具体的代码
}
step2:有参数无返回值的方法
语法:
[访问修饰符] void 方法名称(形式参数){
}
说明:
一个方法中可以有多个形式参数,参数之间用逗号隔开即可。
参数定义的方式:
数据类型 参数名称
例如:
public void display(int a,int b,int c){
}
调用有参数的方法时,需要传递具体的数据称为实际参数。
setp3:无参数有返回值的方法
语法:
[访问修饰符] 返回值类型 方法名称(){
return 值;
}
说明:有返回值的方法中,最后一句代码一定是return 返回值;可以根据返回值的类型,决定方法中返回值的类型。
step4:有返回值有参数的方法
语法:
[访问修饰符] 返回值类型 方法名称(参数列表){
return 返回值;
}
说明:有返回值的方法,每次只能返回一个值。
8.构造方法
在Java中需要通过构造方法创建一个属于该类的具体对象。
构造方法的语法:
[访问修饰符] 类名(){
}
构造方法的名称和类名相同
没有void和return
构造方法不能被static关键字修饰。
构造方法的作用:
1.创建对象
2.对成员属性进行初始化
创建对象的语法:
类名 对象名称=new 类名();
对象调用属性的语法:
对象名称.属性名=属性值;
对象调用方法的语法:
对象名称.方法名称(参数列表);
构造方法分类:
无参数的构造方法又包括隐式的无参数的构造方法和显示的无参数的构造方法。
隐式的无参数的构造方法是由JVM提供的。(当一个类中,没有任何显示的构造方法时,JVM就会为该类提供的隐式的无参数的构造方法)。
注意:当类中提供了一个任何形式的构造方法时,JVM都不会再提供无参数的隐式的构造方法。
有参数的构造方法:
Java中一个类可以有多个构造方法,但是构造方法的参数列表不能相同。
/**
学生应该有姓名(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("zhangsan",20,"男","java001","1001");
stu1.displayInfo();
Student stu2=new Student("李四",30,"男","java002","1002");
stu2.displayInfo();
}
}
9.多态
同一种事物在不同情况下有多种表现形式。
多态的表现形式:
方法重载
方法重写
方法重载:在同一类中,有多个方法名称相同,但参数列表不同(参数列表的不同包括:参数个数,顺序,类型的不同)。
在java中普通方法和构造方法都可以实现方法重载。
返回值类型不同(其它都相同),不能算方法重载。因为当JVM调用方法时无法明确判断调用哪个方法。
/**
方法重载示例
*/
public class Method1{
public void display(){
System.out.println("display方法一");
}
public void display(int num1,int num2){
System.out.println("两数的和是:"+(num1+num2));
}
public void display(int num1,String str){
System.out.println(num1+str);
}
public static void main(String[]args){
Method1 m1=new Method1();
m1.display(10,"20");
}
}
10.this关键字
作用:this就表示当前类的某个对象。
this用法:
用法一:
当方法中的参数名称和成员属性名称一致时,需要用this关键字区分作用域。
用法二:
当this(参数列表)的形式出现在构造方法的第一句代码时,就表示该构造方法调用了当前类中其它的构造方法。
/**
this关键字示例
*/
public class Method2{
String name="lisi";
int age=20;
public Method2(String name,int age){
this.name=name;
this.age=age;
}
public Method2(){
this("田七",80);
}
public void display(String name,int age){
System.out.println(this.name+this.age);
}
public void display(){
System.out.println(this.name+this.age);
}
public static void main(String[]args){
Method2 m2=new Method2("wangwu",30);
m2.display();
Method2 m3=new Method2();
m3.display();
}
}