Date-01-01
一、
1、面向对象的三大特征:封装、继承、多态
2、面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做
面向对象:强调具备了功能的对象,以类\对象为最小单位,考虑谁来做
3、面向对象的两个重要概念:
类:对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体
关系:类是由new出来的,派生出来的
4、属性=成员变量=field=域、字段
方法=成员方法=函数=method
创建类的对象=类的实例化=实例化类
package Date0101; //测试类 public class PersonTest { public static void main(String[] args) { //创建Person类的对象 Person p1=new Person(); //调用对象的结构:属性、方法 //调用属性:“对象.属性” p1.name="aiy"; p1.age=22; p1.isMale=true; System.out.println(p1.name); System.out.println(p1.age); //调用方法:“对象.方法” p1.eat(); p1.sleep(); p1.talk("汉语"); Person p2=new Person(); System.out.println(p2.name); //将p1变量保存的对象地址赋给p3,导致p1和p3指向同一个对象实体 Person p3=p1; System.out.println(p3.name); p3.age=10; System.out.println(p1.age);//10 } } //类 class Person{ //属性 String name; int age; boolean isMale; //方法 public void eat(){ System.out.println("人可以吃饭"); } public void sleep(){ System.out.println("人可以睡觉"); } public void talk(String language){ System.out.println("人可以说话,使用的是:"+language); } }
二、
面向对象思想落地的规则:
1、创建类、设计类的成员
2、创建类的对象
3、通过“对象.属性”或者“对象.方法”调用对象的结构
package Date0102; /** * 类中方法的声明和使用 */ public class CustomerTest { public static void main(String[] args) { Customer use1= new Customer(); use1.eat(); } } //客户类 class Customer{ //属性 String name; int age; boolean isMale; //方法“ public void eat(){ System.out.println("客户吃饭了"); } public void sleep(int hour){ System.out.println("客户休息了"+hour+"小时"); //return; //结束方法,后面不可以声明表达式 } public String getName(){ return name; } public String getNation(String nation){ String info="我的国籍是:"+nation; return info; } }
四、对象的内存解析
//将p1变量保存的对象地址赋给p3,导致p1和p3指向同一个对象实体Person p3=p1; System.out.println(p3.name); p3.age=10; System.out.println(p1.age);//10
五、类中属性的使用
属性(成员变量) 和 局部变量比较
相同点:1、定义变量的格式一样,数据类型,变量名=变量值;
2、先声明,后使用;
3、变量都有其对应的作用域;
不同点:
1、在类中声明的位置不同:属性直接定义在类的一对{}内;局部变量声明在方法类、方法形 参、代码块内、构造器形参、构造器内部变量
2、关于权限修饰符不同:属性:可以声明属性时指明权限,使用权限修饰符;(常用修饰符:private、public、缺省(什么都不写)、protected)——>封装性;局部变量:不可以使用权限修饰符
3、默认初始化值的情况:属性:类的属性,根据其类型,都有默认初始值。
整型(byte\short\int\long) :
浮点型:float\double\ :0.0
字符型:char :0 或者 \u0000
布尔型:boolean : flags\true
引用数据类型(类、数组、接口):Null
局部变量:没有默认初始化值。调用之前要显示赋值;特别的形参在调用时赋值即可
4、在内存中加载的位置不同:属性:加载到堆空间。局部变量:加载到栈空间。
Date-01-02
类中方法的声明和使用
方法:描述类应该具有的功能 如:Math类,sqrt()、random"…
1、举例:
public void eat(){ } public void sleep(int hour(形参)){ } public String getName(){ } public String getNation(String nation){ }
2、方法的声明:
权限修饰符(public\private) 返回值类型(void\String) 方法名(形参列表(可有(可以不止一个) —可无)){ 方法体
} static\final\abstract
3、说明
3.1: 权限修饰符: public \ private \ 缺省 \protected
3.2:返回值类型:有返回值 VS 无返回值
3.2.1:如果有返回值,则必须在方法声明时,指定返回值的类型,同时方法中需要使用return关键字返回指定类型或者变量。如果方法没有返回值,则声明方法时,使用void来表示。可以使用return;结束方法,后面不可以声明表达式。
3.2.2:定义方法是否使用返回值—>要求、经验
3.3:形参列表:方法声明0个、1个或者多个形参。格式:数据类型 形参1,数据类型 形参2 …
3.4:方法体 方法功能的体现
3.5:return 关键字的的使用 1、使用在方法体中。2、结束方法;针对返回值类型的方法,使用return返回所需要的数据。
4、方法的使用 :调用当前类的属性或者方法
递归方法:方法A中调用方法A
Customer use1= new Customer(); use1.eat();
课后练习
1、
package Date0103.Practice1; public class Person { String name; int age; /** * 1:男 * 0:女 */ int sex; public void study(){ System.out.println("studying"); } public void showAge(){ System.out.println("age;"+age); } public int addAge(int i){ age+=i; return age; } }
package Date0103.Practice1; public class PersonTest { public static void main(String[] args) { Person p1=new Person(); Person p2=new Person(); //调用属性 p1.name="aiy-wei"; p1.age=22; p1.sex=1; //调用方法 p1.study(); p1.showAge(); System.out.println("姓名:"+p1.name+"增加两岁后的年龄: "+p1.addAge(2)); p2.study(); System.out.println(p2.addAge(2)); } }
2、计算类Circle圆的面积
package Date0103.Practice2; /** * 计算类Circle圆的面积 */ //测试类 public class CircleTest { public static void main(String[] args) { Circle circle=new Circle(); circle.radius=2.1; System.out.println((double)circle.findArea()); } } //圆 class Circle{ //属性 double radius; //求圆的面积 public double findArea(){ double Area=Math.PI*radius*radius; return Area; } }
3、
参考:
package Date0103.Practice4; public class StudentTest { public static void main(String[] args) { /** * 创建一个空的数组,数组类型是Student类型的。 * 里面可以放三个Student对象 * 简单的类型比如 int string * 但是Student 也是一种类型 * 里面可能包含 number、state、score等属性 */ Student[] student=new Student[20]; //对象数组,设置20个student的类; for(int i=0; i<student.length;i++){ //给数组元素赋值 student[i]=new Student(); //给student对象的属性赋值 student[i].number=i+1; student[i].state=(int)(Math.random()*(6-1+1)+1);//年级:[1,6] student[i].score=(int)(Math.random()*(100-0+1));//成绩:[0,100] } //遍历学生数组 for(int j=0;j<student.length;j++){ // System.out.println(student[j].number+","+student[j].state+","+student[j].score); System.out.println(student[j].info()); } System.out.println("********输出年级是3的学生**********"); for(int j=0;j<student.length;j++){ // System.out.println(student[j].number+","+student[j].state+","+student[j].score); if(student[j].state==3) System.out.println(student[j].info()); } System.out.println("********使用冒泡排序把学生成绩排序输出**********"); for(int j=0;j<student.length;j++){ for(int i=0;i<student.length-j-1;i++){ if(student[i].score>student[i+1].score){ Student temp=new Student(); temp=student[i]; student[i]=student[i+1]; student[i+1]=temp; } } } for(int j=0;j<student.length;j++){ System.out.println(student[j].info()); } } } class Student{ int number;//学号 int state;//年级 int score; //成绩 public String info(){ return "学号:"+number+","+"年级:"+state+","+"成绩:"+score; } }