面向对象OOP(上)①

三条主线

1.Java类及类的成员:属性、方法、构造器;代码块、构造类
2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)
3.其他关键字:thissuperstaticfinalabstractinterfacepackageimport*

"大处着眼,小处着手"

面向过程(POP)与面向对象(OOP)

· 二者都是一种思想,面向对象是相对于面向过程而言的。
面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,强调谁来做。
· 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等

面向对象的两个要素

类和对象

一、设计类,其实就是设计类的成员
属性:对应类中的成员变量
Field = 属性 = 成员变量

行为:对应类中的成员方法
Method = (成员)方法 = 函数

创建类的对象 = 类的实例化 = 实例化类
二、类和对象的使用(面向对象思想落地的实现)
1.创建类,设计类的成员
2.创建类的对象
3.通过“对象.属性”或“对象.方法”调用对象的结构

三、如果创建了一个类的多个对象,则每一个对象都独立的拥有一套类的属性。(非static的)

public class Demo0001 {
 public static void main(String[] args) {
  //创建Person类的对象
  Person p1 = new Person();

  //调用对象的结构:属性、方法
  //调用属性:”对象.属性“
  p1.name = "Tom";
  p1.isMale = true;

  //调用方法:”对象.方法“
  p1.eat();
  p1.sleep();
  p1.talk("Chinese");
 }

}
class Person
{
 //属性
 String name;
 int age = 1;
 boolean isMale;

 //方法
 public void eat()
 {
  System.out.println("人可以吃饭");
 }
 public void sleep()
 {
  System.out.println("人需要睡觉");
 }
 public void talk(String language)
 {
  System.out.println("人可以说话,使用的是:"+language);
 }
}

属性与局部变量

属性(成员变量) VS 局部变量

不同点

属性:直接定义在类的一对{ }内,可以在声明属性时,指明其权限,使用权限修饰符。常用的权限修饰符:private、public、缺省、protected ---->封装性

局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
不可以使用权限修饰符

默认初始化值的情况

属性:
整型(byte、short、int、long) 0
浮点型(float、double) 0.0
字符型(char) 0(或’\u0000’)
布尔型(boolean) false
引用数据类型(类、数组、接口) null

局部变量 :没有默认初始化值
意味着我们在调用局部变量之前,一定要显式赋值
特别的,形参在调用时,我们赋值即可

类中方法的声明与使用

方法:描述类应该具有的功能
比如:Math类、sqrt( )\ramdom( )···
Scanner类:nextInt( )···
Arrays类:sort( ) \ binarySearch( ) \ toString( ) \ equals( ) \ ···

方法的声明:
权限修饰符 返回值类型 方法名 (形参列表)
{
方法体
}

return关键字使用

说明:如果方法有返回值,则必须在方法声明时,指定返回值得类型。同时,方法中,需要 return 关键字来返回指定类型的变量或常量:“return 数据”。
如果方法没有返回值,则方法声明时,使用 void 来表示。通常,没有返回值的方法中,就不使用 return ,但是,如果使用的话,只能“return ;”表示结束此方法的意思。

类的设计
求解圆的面积

public class CircleTest {
 public static void main(String[]args) {

 Circle c1 = new Circle();
  c1.radius = 2.1;
 //对应方式以一
//  double area = c1.findArea();
// System.out.println(area);
 //对应方式二
  c1.findArea();
 }
}
//
class Circle{ 
 //属性
 double radius;   //半径

 //求圆面积的方法
 //方式一
// public double  findArea(){
// double area = 3.14 * radius * radius;
//  return area;
// }
 //方式二
 public void findArea() {
  double area = Math.PI * radius * radius; 
  System.out.println("面积是:" +area);
 }
}

对象数组

/*
 对象数组题目:
 定义类Student 包含三个属性:学号number(int),年级state(int)
 成绩score(int)。创建20个学生对象,学号为1到20,年级[1,6]和成绩[0,100]都由随机数
 确定。
 问题一:打印出三年级(state值为3)的学生信息
 问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
 提示:
 ①生成随机数:Math.random(),返回值类型double;
 ②四舍五入取整:Math.round(double d),返回值类型long
 */
public class Demo0001 {
 public static void main(String[] args) {

  //声明Student类型数组
  Student[] stus = new Student[20];
  for(int i=0;i<stus.length;i++)
  {
   //给数组元素赋值
   stus[i] = new Student();
   //给Student对象的属性赋值
   stus[i].num = (i+1);
   //年级:[1,6]
   stus[i].state = (int)(Math.random()*(6-1+1)+1);
   //成绩
   stus[i].score = (int)(Math.random()*(100-0+1)+0);

  }
  Student test = new Student();
  //遍历学生数组
   test.printf(stus);
  /*
   for(int i = 0;i
  System.out.println("三年级学生的信息:");
  //打印三年级学生的信息
  test.searchState(stus,3);
  /*for(int i = 0;i
  System.out.println("成绩从小到大排序:");
  //使用冒泡排序按学生的成绩排序,并遍历所有学生信息
  test.sort(stus);
  /*for(int i = 0;i stus[j+1].score)
    {
     //如果需要换序,交换的是数组的元素,Student对象!!!
     Student temp = stus[j];
     stus[j] = stus[j+1];
     stus[j+1] = temp;
    }
   }
  }*/
  //遍历学生数组
  test.printf(stus);
    /*for(int i = 0;i 
 }

}
class Student
{
 //属性
 int num;
 int state;
 int score;

//方法

 //显示学生信息的方法
 public String info()
 {
  return "学号:"+ num+" 年级:"+state+" 成绩:"+score; 
 }
 //遍历数组的方法
 public void printf(Student[] stus)
 {
  for(int i=0;i<stus.length;i++)
  {
   System.out.println(stus[i].info());
  }
 }
 //寻找某年级学生的方法
 public void searchState(Student [] stus,int state)
 {
  for(int i = 0;i<stus.length;i++)
  {
   if(stus[i].state==state)
   {
    System.out.println(stus[i].info());
   }
  }
 }
 //数组排序的方法
 public void sort(Student[] stus)
 {
  for(int i = 0;i<stus.length-1;i++)
  {
   for(int j = 0;j<stus.length-1-i;j++)
   {
    if(stus[j].score > stus[j+1].score)
    {
     //如果需要换序,交换的是数组的元素,Student对象!!!
     Student temp = stus[j];
     stus[j] = stus[j+1];
     stus[j+1] = temp;
    }
   }
  }
 }
 }

你可能感兴趣的:(Java,java,类)