Java面向对象基础

1.概述

    *面向对象思想就是指创建对象,使用对象

    *class是用来描述生活中的事务

        *属性:特征------>成员变量

        *行为:能做什么事------>成员方法

        *类:一组相同属性和行为的集合体

        *对象:就是该类其中的一个具体事务

    *面向对象的特点

        *强调对象

        *自己是指挥者的角度

        *可以将复杂的事情简单化

    *面向对象的三大特征

        *封装

        *多态

        *继承

2.成员变量和局部变量的区别

    *在类中的位置不同

        *局部变量:在方法内

        *成员变量:在类中,方法外

    *在内存中的位置不同

        *局部变量:在栈内,变量为赋值不能使用

        *成员变量:在堆内存中,因为有初始化值,直接可以拿来用

    *生命周期不同

        *局部变量:随着方法的调用而存在,随着方法的结束而消失

        *随着类的对象的创建而存在,随着对象的消失而消失

    *初始化值不同

        *局部变量:没有默认的初始化值

        *成员变量:有默认的初始化值

package com.text;
/*
 * 成员变量和局部变量的区别:
 * 		A:在类中的位置不同
 * 			成员变量:类中,方法外
 * 			局部变量:方法中或者方法声明上(形式参数)
 * 		B:在内存中的位置不同
 * 			成员变量:堆内存
 * 			局部变量:栈内存
 * 		C:生命周期不同
 * 			成员变量:随着对象的创建而存在,随着对象的消失而消失
 * 			局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
 * 		D:初始化值的问题
 * 			成员变量:有默认值
 * 			局部变量:没有默认值。必须先定义,赋值,最后使用
 */
public class Variable {
	int x;
	public void show() {
		int y = 0;

		System.out.println(x);
		System.out.println(y);
	}
}

3.封装

    *private关键字

        *是一个权限修饰符

        *可以修饰成员变量

        *被private修饰的成员只能在本类中访问

        *常用来修饰成员变量

            *提供公共的getter和setter方法

package com.text;
/*
 * 学生类
 * 
 * 通过对象直接访问成员变量,会存在数据安全问题
 * 这个时候,我们就想能不能不让外界的对象直接访问成员变量呢?
 * 能。
 * 如何实现呢?
 * 		private关键字
 * 
 * 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.text_01;
/*
 * 学生类的测试类
 */
public class StudentDemo {
	public static void main(String[] args) {
		//创建学生对象
		Student s = new Student();
		s.show();
		
		s.name = "小明";
		//s.age = 28;
		//s.age = -28;
		//s.setAge(-28);
		s.setAge(28);
		s.show();
	}
}

    *封装的概述

        *是面向对象的三大特性之一

        *是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改

    *封装的原则:

        *将不需要对外提供的内容都隐藏起来

        *把属性隐藏,提供公共的方法对其访问

        *成员变量private,提供对应的getter和setter方法

    *好处

        *通过方法来控制成员变量的操作,提过了代码的安全性

        *把代码用方法进行封装,提高代码的复用性

    *this关键字

        *this代表所在类的对象引用

            *方法被那个对象调用,this就代表那个对象(谁调用代表谁)

        *this的使用场景

            *局部变量和成员变量重名

4.面向对象的构造方法

    *构造方法

        *主要用来给对象的数据进行初始化

    *构造方法的格式

        *方法名与类名相同

        *没有返回值类型

        *没有具体的返回值

    *构造方法和普通方法的区别

        *构造方法没有返回值,连void都没有

        *构造方法的方法名必须和类名一致

        *构造方法是通过new来调用,用来给属性在堆内存开辟空间,而普通方法是通过对象来调用的

package com.text;
/*
 * 构造方法:
 * 		给对象的数据进行初始化
 * 
 * 格式:
 * 		方法名和类名相同
 * 		没有返回值类型,连void都不能写
 * 		没有具体的返回值
 *
 */
public class Student {	
	public Student() {
		System.out.println("这是构造方法");
	}
}

    *构造方法的调用

package com.text;

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

    *构造方法的注意事项与重载

        *不提供无参构造方法,系统会给出默认的无参构造方法

        *如果提供了构造方法,系统就不会提供默认的构造方法

        *构造方法也可以重载

package com.text;
/*
 * 构造方法:
 * 		给对象的数据进行初始化
 * 
 * 格式:
 * 		方法名和类名相同
 * 		没有返回值类型,连void都不能写
 * 		没有具体的返回值
 * 
 * 构造方法的注意事项:
 * 		A:如果我们没有给出构造方法,系统将会提供一个默认的无参构造方法供我们使用。
 * 		B:如果我们给出了构造方法,系统将不在提供默认的无参构造方法供我们使用。
 *        这个时候,如果我们想使用无参构造方法,就必须自己提供。
 *        推荐:自己给无参构造方法
 *      C:构造方法也是可以重载的
 * 
 * 成员变量赋值:
 * 		A:setXxx()方法
 * 		B:带参构造方法	
 */
public class Student {
	private String name;
	private int age;
	
	/*
	public Student() {
		System.out.println("这是构造方法");
	}
	*/
	
	public Student() {}
	
	public Student(String name) {
		this.name = name;
	}
	
	public Student(int age) {
		this.age = age;
	}
	
	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void show() {
		System.out.println(name+"---"+age);
	}
}
package com.text;

public class StudentDemo {
	public static void main(String[] args) {
		//如何调用构造方法呢?
		//通过new关键字调用
		//格式:类名 对象名 = new 构造方法(...);
		Student s = new Student();
		s.show();
		
		//public Student(String name)
		Student s2 = new Student("小红");
		s2.show();
		
		//public Student(int age)
		Student s3 = new Student(28);
		s3.show();
		
		//public Student(String name,int age)
		Student s4 = new Student("小红",28);
		s4.show();
	}
}

    *标准学生类代码

        *类

            *成员变量

            *构造方法

                *有参和无参

        *成员方法

              *getter和setter方法

        *给成员变量赋值的方式

              *无参构造+setter方法

              *有参构造

package com.text;
/*
 * 学生类
 */
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;
	}
}

5.类名作为形参和返回值

    *类名作为形参

package com.text;

public class Student {
	public void study() {
		System.out.println("好好学习,天天向上");
	}
}
package com.text_01;

public class Teacher {
	public void test(Student s) {//接收传递过来的Student对象的地址值
		s.study();                  
	}
}
package com.txt_02;

//需求: 调用Teacher的test方法

//类名作为形式参数:其实这里需要的是该类对象。
public class Test {
	public static void main(String[] args) {
		Teacher t = new Teacher();
		Student s = new Student();
		t.test(s);
	}
}
    *类名作为返回值
package com.text;

public class Student {
	public void study() {
		System.out.println("好好学习,天天向上");
	}
}
package com.text;
public class Teacher {
	
	public Student getStudent() {
		Student s = new Student();
		return s;//返回的是Student对象的地址值
	}
}
package com.text;

//需求: 通过Teacher得到Student对象,然后调用Student类的方法
//如果方法的返回值是类名:其实返回的是该类的对象
public class Test {
	public static void main(String[] args) {
		Teacher t = new Teacher();
		Student s = t.getStudent();
		s.study();
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值