java基础知识六(面向对象一)

第1章 面向对象概述

1.1 面向对象思想

  • 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。面向过程的代表语言:C语言

  • 面向对象思想就是不断的创建对象,使用对象,指挥对象做事情。(如果有对象,直接用对象,对我们直接提供服务)

例如:吃煎饼果子利用面向对象的思想

  1. 找会摊煎饼的大妈(创建一个摊煎饼大妈的对象)
  2. 调用其摊煎饼的技能(功能),传递进去钱参数
  3. 返回给我们一个煎饼

1.2 面向过程特点与面向对象特点

面向过程:
强调的是过程,所有事情都需要自己完成

  • 面向对象:
  • 可以将复杂的事情简单化,将我们从执行者变成了指挥者角色发生了转换

1.3 类与对象概述

  • 我们学习编程是为了什么
    为了把我们日常生活中实物用学习语言描述出来
  • 我们如何描述现实世界事物
    属性 就是该事物的描述信息(事物身上的名词)
    行为 就是该事物能够做什么(事物身上的动词)
  • Java中最基本的单位是类,Java中用class描述事物也是如此
    成员变量 就是事物的属性
    成员方法 就是事物的行为
  • 定义类其实就是定义类的成员(成员变量和成员方法)
    a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
    b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
    E:类和对象的概念
    a:类:是一组相关的属性和行为的集合(我们班所有的同学都具备相同的属性和行为,比如:姓名,年龄,学习,这样就把所有的学生成为学生类)
    b:对象:是该类事物的具体体现(说某个同学时,他都具备自己特有的属性和行为)
  • 举例:
    类 学生
    对象 具体的某个学生就是一个对象
    比如:车是一个类,具体的开的奔驰、宝马,就是对象
public class Student {
	//成员变量
	//姓名
	String name;
	//年龄
	int age;
	
	//成员方法
	//学习的方法
	public void study() {
		System.out.println("好好学习,天天向上");
	}
	
	//吃饭的方法
	public void eat() {
		System.out.println("学习饿了要吃饭");
	}

  • 学生类的使用
public class StudentTest {
	public static void main(String[] args) {
		//类名  对象名  = new 类名();
		Student s = new Student();
		//System.out.println("s:"+s);//com.itheima_02.Student@da6bf4
		
		//使用成员变量
		System.out.println("姓名:"+s.name);//null
		System.out.println("年龄:"+s.age);//0
		System.out.println("----------");
		
		//给成员变量赋值
		s.name = "林青霞";
		s.age = 30;
		//再次使用成员变量
		System.out.println("姓名:"+s.name);//林青霞
		System.out.println("年龄:"+s.age);//30
		System.out.println("----------");
		
		//调用成员方法
		s.study();
		s.eat();
	}
}

第2章 对象的内存图

2.1 一个对象的内存图图解

在这里插入图片描述

2.2 两个对象的内存图(共用方法区)

在这里插入图片描述

2.3 两个对象的内存图(两个引用指向同一个堆内存)

在这里插入图片描述

2.4 成员变量和局部变量区别

  • 成员变量和局部变量的区别:
  •  A:在类中的位置不同
    
  •      成员变量:在类中,方法外
    
  •      局部变量:在方法中或者方法声明上(形式参数)
    
  •  B:在内存中的位置不同
    
  •      成员变量:在堆内存
    
  •      局部变量:在栈内存
    
  •  C:生命周期不同
    
  •      成员变量:随着对象的创建而存在,随着对象的消失而消失
    
  •      局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
    
public class VariableDemo {
	int x;
	
	public void show() {
		int y = 10;
		
		System.out.println(x);
		System.out.println(y);
	}
}

第3章 private、this关键字和封装

3.1 private关键字的概述和特点

3.1.1 private关键字
A:private关键字:
a:是一个权限修饰符。
b:可以修饰成员(成员变量和成员方法)
c:被private修饰的成员只在本类中才能访问

/*
 * 直接使用对象名访问成员变量,会存在数据的安全问题
 * 这个时候,我们就应该思考能不能让外界不要直接访问成员变量?
 * 能
 * 如何实现呢?
 * 		用private关键字
 * 针对被private修饰的成员变量,我们会相应的给出getXxx()和setXxx()用于获取和设置成员变量的值,
 * 方法用public修饰
 */
public class Student {
	String name;
	//int age;
	private int age;
	
	public void setAge(int a) {
		if(a<0 || a>200) {
			System.out.println("你给的年龄有误");
		}else {
			age = a;
		}
	}
	
	public int getAge() {
		return age;
	}
	
	public void show() {
		System.out.println(name+"***"+age);
	}
}


package com.itheima_01;
/*
 * 测试类
 */
public class StudentTest {
	public static void main(String[] args) {
		//创建对象
		Student s = new Student();
		s.show();
		
		//给成员变量赋值
		s.name = "林青霞";
		//s.age = 30;
		//s.age = -30;
		//通过方法赋值
		s.setAge(-30);
		s.show();
	}
}

3.2 private修饰后的标准类代码

• private最常见的应用:
把成员变量用private修饰
提供对应的getXxx()/setXxx()方法

/*
 * 学生类
 */
public class Student {
	private String name;
	private int age;
	
	public void setName(String n) {
		name = n;
	}
	
	public String getName() {
		return name;
	}
	
	public void setAge(int a) {
		age = a;
	}
	
	public int getAge() {
		return age;
	}
}


package com.itheima_02;
/*
 * 测试类
 */
public class StudentTest {
	public static void main(String[] args) {
		//创建对象
		Student s = new Student();
		System.out.println(s.getName()+"***"+s.getAge());
		
		//给成员变量赋值
		s.setName("林青霞");
		s.setAge(30);
		System.out.println(s.getName()+"***"+s.getAge());
	}
}

3.3 封装的概述和好处

  • 封装概述
    是面向对象三大特征之一
    是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
  • 封装原则:
    将不需要对外提供的内容都隐藏起来。
    把属性隐藏,提供公共方法对其访问。
    成员变量private,提供对应的getXxx()/setXxx()方法
  • 好处:
    通过方法来控制成员变量的操作,提高了代码的安全性
    把代码用方法进行封装,提高了代码的复用性

3.4 this关键字的概述和使用

  • this关键字由来和使用
    A:this:代表所在类的对象引用
    方法被哪个对象调用,this就代表那个对象
    B:什么时候使用this呢
    局部变量和成员变量重名

第4章 面向对象之构造方法

4.1 构造方法的概述和使用

构造方法作用概述
给对象的数据进行初始化

  • 构造方法格式
    方法名与类名相同
    没有返回值类型,连void都没有
    没有具体的返回值
public class Student {	
	public Student() {
		System.out.println("这是构造方法");
	}

package com.itheima_08;

public class StudentDemo {
	public static void main(String[] args) {
		//如何调用构造方法呢?
		//通过new关键字调用
		//格式:类名 对象名 = new 构造方法(...);
		Student s = new Student();
	}
}

4.2 构造方法的注意事项

如果你不提供构造方法,系统会给出默认构造方法

  • 如果你提供了构造方法,系统将不再提供
  • 构造方法也是可以重载的,重载条件和普通方法相同

4.3 标准的类代码和测试

类:

  • 成员变量
  • 构造方法
    无参构造方法
    带参构造方法
  • 成员方法
    getXxx()
    setXxx()
  • 给成员变量赋值的方式
    a:无参构造方法+setXxx()
    b:带参构造方法
public class Student {
	//成员变量
	private String name;
	private int age;
	
	//构造方法
	public Student() {}
	
	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	//成员方法
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public int getAge() {
		return age;
	}
}

public class StudentTest {
	public static void main(String[] args) {
		//无参构造方法+setXxx()
		Student s = new Student();
		s.setName("林青霞");
		s.setAge(30);
		System.out.println(s.getName()+"---"+s.getAge());
		
		//带参构造方法
		Student s2 = new Student("林青霞",30);
		System.out.println(s2.getName()+"---"+s2.getAge());
	}
}

发布了30 篇原创文章 · 获赞 10 · 访问量 894

猜你喜欢

转载自blog.csdn.net/weixin_45788152/article/details/104221460