从零开始学JAVA——面向对象(一)

一、java面向对象学习的三条主线

1.java类及类成员:属性、方法、构造器;代码块、内部类
2.面向对象的三大特征:封装,继承,多态,(抽象性)
3.其他关键字 this super static final abstract interface package import
“大处着眼,小处着手”

二、“人吧大象装进冰箱”

1.面向过程,强调的是功能行为,一函数为最小单位,考虑怎么做
1)把冰箱门打开
2)抬起大象
3)把冰箱门关闭
2.面向对象,强调具备了功能的对象,以类、对象为最小单位。考虑谁来做

{
	打开冰箱门{
		冰箱.打开();
 	}
	抬起大象{
	大象.进入(冰箱)
 	}
	关闭(冰箱){
 		冰箱.闭合();
}
}

冰箱{
 		打开() { };
 		闭合() { };
 }
大象{
 		进入(冰箱){
 		}
  }
}

三、面向对象的两个要素

类:对一类事物描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)
面向对象程序设计的重点是类的设计
设计类,就是设计类的成员

/*

四、设计类,其实就是设计类的成员

属性=成员变量=field=域、字段
方法=成员方法=函数=method

五、类和对象的使用面向对象思路落地的实现

1.创建类、设计类成员
2.创建对象
3.通过"对象.属性"或"对象.方法"调用对象的结构

六、如果创建了一个雷的多个对象,则每个对象都独立拥有一套类的属性

意味着:我们修改一个对象属性A,则不影响另一个属性对象

七、对象的内存解析

 import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag;
//测试类
public class PersonTest {
	public static void main(String[] args) {
		//创建Person类的对象
		Person p1 = new Person();
		//调用对象的结构:属性、方法
		//调用属性:“对象.属性”
		p1.name="tom";
		p1.isMale = true;
		System.out.println(p1.name);
		
		p1.eat();
		p1.sleep();
		p1.talk("中文");
		//将P1变量保存的对象地址赋给P2,导致P1和P2指向了堆空间中的同一个对象实体。
		Person p2 = p1;
		System.out.println(p2.name);
		
		p2.age = 10;
		System.out.println(p1.age);
	}
}

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 局部变量
    1.相同点
    1.1定义变量的格式:数据类型 变量名 = 变量值
    1.2先声明,后使用
    1.3变量都有其对应的作用域
    2.不同点
    2.1在类中声明的位置不同
    属性:直接定义在类的一对{}内
    局部变量:声明在方法内、方法形参、代码块、构造器形参、构造器内部的变量
    2.2关于权限修饰符的不同
    属性:可以在声明属性时,指明其权限,使用权限修饰符
    常用的权限修饰符:private、public、缺省protected —》封装性
    目前大家声明属性时,都使用缺省就可以了
    局部变量:不可以使用权限修饰符

2.3默认初始化值的情况:
属性:类的属性,根据其类型,都有默认初始化值
整型(byte、short、int、long)0
浮点(float、double)0.0
字符型(char)0或’\u0000’
布尔型(boolean),false

引用数据类型(类、数组、接口):null
局部变量:没有默认初始化值
意味着,我们在调用局部变量之前,一定要显式赋值
特别地,形参在调用时,我们赋值即可。

2.4在内存中加载的位置
属性:加载到堆空间中(非static)
局部变量,加载到栈空间

public class UserTest {
	public static void main(String[] args) {
		User u1 =new User();
		System.out.println(u1.name);
		System.out.println(u1.age);
		System.out.println(u1.isMale);
		u1.talk("中文");
		u1.eat();
	}
}

class User{
	//属性(或成员变量)
	String name;
	int age;
	boolean isMale;
	
	public void talk(String language) {
		System.out.println("我们使用"+language);
	}
	
	public void eat() {
		String food = "烙饼";
		System.out.println("北方人喜欢吃"+food);
		
	}
}

类中方法的声明和使用

方法:描述类应该具有的功能
比如:math类:sqrt()\random()
Scanner类:nextXxx()
Array类:sort()\binarySearch()\toString()\equals()```

##1.举例

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

方法体

}

3.说明

3.1关于权限修饰符
private、public、缺省、protected
3.2返回值类型:有返回值,没有返回值
3.2.1如果方法有返回值,则必须在方法声明时,指定返回值类型。同时要,方法中,需要使用
return关键字来返回指定类型的变量或常量。
如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不需要
使用return,如果使用的话,只能“return;”来表示结束此方法的意思。

3.2.2我们定义方法该不该有返回值?
1)题目要求
2)凭经验,具体问题具体分析
3.3方法名,属于标识符,遵循标识符的规则和规范,“见名知意”
3.4形参列表,方法可以声明0个,1个···
3.4.1格式:数据类型1 形参1,数据类型2 形参2,···
3.4.2我们定义方法时,该不该定义形参
1)题目要求
2)凭经验
3.5方法体:方法功能的体现

4.return关键字使用

1.使用范围,使用在方法体中
2.作用:1)结束方法,2)针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据
3.注意点,return关键字后面不可以声明执行语句

5.方法的使用:可以调用当前类的属性或当前类的方法
方法中不可以定义方法

public class CustomerTset {
	public static void main(String[] args) {
		Customer cust1 = new Customer();
		cust1.eat();
		cust1.sleep(6);
	}
}
class Customer{
	String name;
	int age;
	boolean isMale;
	
	public void eat() {
		System.out.println("客户吃饭");
	}
	
	public void sleep(int hour) {
		System.out.println("休息时间"+hour+"个小时");
		eat();
	}
	
	public String getName(){
		if(age > 18) {
			return name;
		}else {
			return "Tom";
		}
		
	}
	
	public String getNation(String nation) {
		String info = "我的国籍是"+nation;
		return info;
	}
	
	
}

课后练习一(利用面向对象的编程方法)

利用面向对象的编程方法,设计类Circle计算园的面积

public class CircleTest {
	public static void main(String[] args) {
		Circle c1 = new Circle();
		c1.radius = 5;
		double area = c1.findArea();
		System.out.println(area);
		
		c1.findArea1();
	}
}

class Circle{
	//属性
	double radius;
	
	//求圆面积
	public double findArea() {
		double area = Math.PI*radius*radius;
		return area;
	}
	
	public void findArea1() {
		double area = Math.PI * radius*radius;
		System.out.println("园的面积:"+area);
	}
}

课后练习二

public class StudentTest1 {
	public static void main(String[] args) {
		Student1[] stus = new Student1[20];
		
		for(int i = 0; i < stus.length;i++) {
			//给数组元素赋值
			stus[i] = new Student1();
			//给Student对象赋值
			stus[i].number = (i+1);
			//年级
			stus[i].state = (int)(Math.random()*(6-1+1)+1);
			//成绩[0,100]
			stus[i].score = (int)(Math.random()*(100-0+1));
		}
		StudentTest1 test = new StudentTest1();
		//遍历学生 数组
		test.print(stus);
		System.out.println("**************");
		//打印出三年级的学生信息
		test.searchState(stus, 3);
		System.out.println("**************");
		//使用冒泡排序,排序学生的成绩
		test.sort(stus);
		test.print(stus);
	}
	//遍历数组封装
	public void print(Student1[] stus) {
		for(int i = 0;i < stus.length; i++) {
			System.out.println(stus[i].info());
		}
	}
	/**
	 * 
	 * @Description 查找student的数组中指定年级的学生信息
	 * @author admin
	 * date 2020年9月12日下午8:01:11
	 * @param stus要查找的数组
	 * @param state要找的年级
	 */
	public void searchState(Student1[] stus,int state) {
		for(int i = 0;i<stus.length;i++) {
			if(stus[i].state == state) {
				System.out.println(stus[i].info());
			}
		}
	}
	/**
	 * 
	 * @Description 给Student1排序
	 * @author admin
	 * date 2020年9月12日下午8:02:46
	 * @param stus
	 */
	public void sort(Student1[] stus) {
		for(int i = 0;i<stus.length;i++) {
			for(int j = 0;j<stus.length-1;j++) {
				if(stus[j].score>stus[j+1].score) {
					Student1 temp = stus[j];
					stus[j] = stus[j+1];
					stus[j+1]=temp;
				}
				
			}
		}
	}
}

class Student1{
	int number;//学号
	int state;//年级
	int score;//成绩
	
	//显示学生信息的方法
	public String info() {
		return "学号:"+number+",年级:"+state+",成绩"+score;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值