一:理解:
题目:人把大象装进冰箱;
- 面向过程:
(1)、打开冰箱;
(2)、把大象放进冰箱;
(3)、关闭冰箱。
2、面向对象:
人{
打开(冰箱){ 冰箱.开开();}
操作(大象){ 大象.进入(冰箱);}
关闭(冰箱){ 冰箱.合上();}
}
大象{
进入(冰箱){ }
}
冰箱{
开开(){ }
合上(){ }
}
不管一个项目或工程有多大,一定是有一个一个的类构成的。
面向对象的编程关注于类的设计:
一:一道基础菜(用eclipse)
1、
//一、面向对象思想的法则之一:
(1)、设计类,并设计类的成员(成员变量&成员方法);
(2)、通过类,来创建类的对象(也称作类的实例化);
(3)、通过”对象.属性”或”对象.方法”来调用,完成相应的功能。
//二、创建的多个对象彼此之间可以互相赋值,单独定义多个对象时,对象之间无任何联 等系。
//三、类的属性(成员变量):
成员变量 VS 局部变量
相同点:1、遵循变量声明的格式:数据类型 变量名=初始值;
2、都有作用域;
不同点:1、声明位置不同:成员变量声明在类里,方法外
局部变量声明在方法内,方法的形参部分,代码块内
2、成员变量的修饰符有四个:public、protected、private、缺省;
局部变量没有修饰符,与所在的方法修饰符
3、 初始化值:一定会有初始化。
成员变量:如果在声明的时候,不显示的赋值,那么不同数据类型会有不同的默认初初始化值。
局部变量:一定要显式的赋值,不会有默认的值。
4、二者在内存中存放的位置不同:成员变量存在于堆空间中,局部变量存在于栈空间中。
总结:
关于变量的分类:1)、按照数据类型的不同,基本数据类型(8种)&引用数据类型(数组等);
2)、按照声明的位置:成员变量 & 局部变量。
//四、类的方法:提供某种功能的实现
1、Public void eat(String name){ …功能… }
权限修饰符 返回值类型 方法名(形参)
2、方法内可以调用本类的其他方法或函数,但是不能在方法内再定义方法。
package day03;
import java.util.Scanner;
public class test{
public static void main(String[] args) {
Person p=new Person(); //实例化Person类的对象
p.info(); //调用Person类中的方法(函数),也可调用属性(变量)
p.setName(“付昊”);
}
}
class Person{ //类;抽象的。
//1、属性
String name;
int age;
boolean sex;
//2、方法
public void eat() {
System.out.println("吃啊");
}
public void sleep() {
System.out.println("睡觉");
}
public String getName() {
return name;
}
public void setName(String n) { //n是局部变量。
//给name属性赋值等价于在main方法中用p.name=“ ”;
name=n;
}
public void info() {
eat();
sleep();
getName();
System.out.println("好了。");
}
}
/* 扩展:Scanner s=new Scanner(system.in); 需要import java.util来告诉Scanner类从哪里来的。*/
2、类对象的内存解析图:
二、习题菜:
package test;
public class TestPerson {
public static void main(String[] args) {
Person p=new Person();
p.study();
p.showAge();
p.addAge(2);
p.showAge();
Person p1=new Person();
p1.showAge();
}
}
class Person{
//1、属性
String name;
int age;
int sex;
//2、方法
public void study() {
System.out.println("studying");
}
public void showAge() {
System.out.println(age);
}
public int addAge(int i) {
age+=i;
return age;
}
}
- 求圆的面积:
package test;
public class TestCircle {
public static void main(String[] args) {
Circle circle=new Circle();
circle.radius=3.2;
circle.findArea();
System.out.println();
circle.setRadius(9.0);
circle.findArea();
}
}
class Circle{
double radius=1.0;
//提供方法,用于获取圆的面积
public void findArea() {
System.out.println(3.14*radius*radius);
}
public double getRadius() { //返回圆的半径
return radius;
}
public void setRadius(double r) { //设置圆的半径
radius=r;
}
}
3、求数组最大值等等的程序
package test;
public class ArrayUtil {
//求数组最大值
public int getMax(int[] arr) {
int max=arr[0];
for(int i=0;i<arr.length;i++) {
if(arr[i]>max)
max=arr[i];
}
return max;
}
//求数组最小值
public int getMin(int[] arr) {
int min=arr[0];
for(int i=0;i<arr.length;i++) {
if(arr[i]<min)
min=arr[i];
}
return min;
}
//遍历数组元素
public void printArray(int[] arr) {
System.out.println("[");
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]+"\t");
}
System.out.println("]");
}
//求数组的平均值
public int avg(int[] arr) {
int sum=getSum(arr);
return sum/(arr.length);
}
//求数组的总和
public int getSum(int[] arr) {
int sum=0;
for(int i=0;i<arr.length;i++) {
sum+=arr[i];
}
return sum;
}
//数组的反转
public int[] reverse(int[] arr) {
for(int i=0,y=arr.length-1;i<y;i++,y--) {
int temp=arr[i];
arr[i]=arr[y];
arr[y]=temp;
}
return arr;
}
//实现数组的复制
public int[] copy(int[] arr) {
int[] arr2=new int[arr.length];
for(int i=0;i<arr.length;i++) {
arr2[i]=arr[i];
}
return arr2;
}
//对数组进行排序
public void sort(int[] arr,String desc) {
if(desc=="asc") {
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}else if(desc=="desc") {
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j]<arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}else {
System.out.println("您输入的排序方式有误!");
}
}
}
package test;
public class TestArray {
public static void main(String[] args) {
int[] arr=new int[] {12,23,442,21,32,99,9,98};
ArrayUtil au=new ArrayUtil();
int max=au.getMax(arr);
System.out.println("数组最大值="+max);
int min=au.getMin(arr);
System.out.println("数组最小值="+min);
int avg=au.avg(arr);
System.out.println("平均值="+avg);
au.printArray(arr); //打印数组
au.reverse(arr); //反转数组
au.printArray(arr);
au.sort(arr, "desc"); //从大到小排序
au.printArray(arr);
au.sort(arr, "asc"); //从小到大排序
au.printArray(arr);
}
}
/*方法重载的条件:
(1)、方法定义在同一个类中;
(2)、方法名必须相同;
(3)、方法的参数列表不同(参数的个数不同或者参数的类型不同)
补充:方法的重载与方法的返回值类型没有任何关系。只是看函数名与形式参数类型
例子:
void show(int a,char b,double c){ … }
与
double show(int x,char y,double z){ … }
不是互为重载函数。*/
package day03;
import java.util.Scanner;
public class test{
public static void main(String[] args) {
test t=new test();
t.mOL(2);
t.mOL(3,5);
t.mOL("Hello,World!!!");
}
//以下三个方法为重载
public void mOL(int i) {
System.out.println(i*i);
}
public void mOL(int i,int j) {
System.out.println(i*j);
}
public void mOL(String str) {
System.out.println(str);
}
}