java 面向对象。

面向对象编程基础

面向对象

思想特征
1.是一种符合我们思想习惯的思想
2.可以将复杂的事情简单化
3.将我们从执行者变成了指挥者
角色发生变化
面向对象开发
就是不断创建对象,使用对象,指挥对象做事情

面向对象特征

  1. 封装

  2. 继承

  3. 多态

类与对象概述

如何描述现实世界

  • 属性:就是该事物的描述信息(事物身上的名词)
  • ⾏为:就是该事物能够做什么(事物身上的动词)

Java中最基本的单位——类

  • 成员变量:事物的属性
  • 成员⽅法:事物的⾏为

定义类其实就是定义类的成员

  • 成员变量:在类中,⽅法外
  • 成员⽅法:在类中.

类和对象的概念

  • 类:是⼀组相关的属性和⾏为的集合
  • 对象:该类事物的具体体现
  • 举例
    类——学⽣
    对象——具体的某个学⽣就是⼀个对象

学生类的定义

class Student{
 //属性的描述
 String name;
 int age;

 //⾏为的描述
 public void study(){
 System.out.println("学⽣学习");
 }

 public void sleep(){
 System.out.println("学⽣睡觉");
 }
}

手机类定义

class Phone{
 String brand;
 int price;

 public void call(){
 System.out.println("打电话");
 }

 public void sendMessage(){
 System.out.println("发消息");
 }
}

学生类的使用

public class Demo1_Student {
 public static void main(String[] args)
 {
 //创建对象的格式
 Student s = new Student();
 //定义成员变量
 s.name = "张三";
 s.age = 23;
 System.out.println(s.name + "..." + s.age);
⼿机类的使⽤
 //定义成员⽅法
 s.study();
 s.sleep();
 }
}

class Student{
 //属性的描述
 String name;
 int age;
 //⾏为的描述
 public void study(){
 System.out.println("学⽣学习");
 }
 public void sleep(){
 System.out.println("学⽣睡觉");
 }
}

手机类的使用

public class Demo2_Phone {
 public static void main(String[] args)
 {
 Phone p = new Phone();
 p.brand = "iPhone6 Plus";
 p.price = 8888;
 System.out.println(p.brand + "..." + p.price);
 p.call();
 p.sendMessage();
 }
}
class Phone{
 String brand;
 int price;
 public void call(){
 System.out.println("打电话");
 }
 public void sendMessage(){
 System.out.println("发消息");
 }

成员变量与局部变量的区别

在类中的位置不同

  • 成员变量:在类中⽅法外
  • 局部变量:在⽅法定义中或者⽅法声明上

在内存中的位置不同

  • 成员变量:在堆内存中(成员变量属于对象,对象进堆内存)
  • 局部变量:在栈内存中(局部变量属于⽅法,⽅法进栈内存)

⽣命周期不同

  • 成员变量:随着对象的创建⽽存在,随着对象的消失⽽消失
  • 局部变量:随着⽅法的调⽤⽽存在,随着⽅法的调⽤完毕⽽消失

初始化值不同

  • 成员变量:有默认化初始值
  • 局部变量:没有默认化初始值,必须定义,赋值,然后才能使⽤

注意事项

  • 局部变量名称可以和成员变量名称⼀样,在⽅法中使⽤的时候,采⽤的就是就近原则
  • 基本数据类型:byte, short,int,long,float,double,boolean,char——空为0
  • 引⽤数据类型:数组,类,接⼝,枚举——空为null
   public class Demo3_Person {
     public static void main(String[] args){
    	 Person p = new Person();
    	 p.speak();
    	}
    }
    class Person{
    	 String name;
    	 int num;
    	 public void speak(){
    	 int num = 10;
    	 System.out.println(name);
    	 System.out.println(num);
    	 }
    }
..如何調用形參
	public class Demo4_Student {
		 public static void main(String[] args)
		 {
		 print(10);
		
		 Student1 s = new Student1(); //创建对象,并将对象的地址赋值给s
		 print(s);
		 }
		
		 public static void print(int x){ //基本数据类型当作形式参数:值传递
		 System.out.println(x);
		 }
		
		 public static void print(Student1 stu){//引⽤数据类型当作形式参数:地址传递
		 stu.name = "张3";
		 stu.age = 18;
		 stu.speak();
		 }
		}
		class Student1{
		 String name;
		 int age;
		 public void speak(){
		 System.out.println(name + "..." + age);
		 }
		}
		

封裝與this

封装概述

  • 是指隐藏对象的属性和实现细节,仅对外提供公共访问⽅式

封装好处

  • 隐藏实现细节,提供公共的访问⽅式
  • 提⾼了代码的复⽤性
  • 提⾼了安全性

封装原则

  • 把不需要对外提供的内容都隐藏起来
  • 把属性隐藏,提供公共⽅法对其访问

private的概述

  1. 是⼀个权限修饰符
  2. 可以修饰成员变量和成员发放
  3. 被修饰的成员只能在本类中被访问

封装与private的应⽤

  • 把成员变量⽤private修饰
  • 对其提供对应的getXxx( )和setXxx( )⽅法
  • private仅仅是封装的⼀种体现形式,不能说封装就死私有

案例演示
public class Demo6_Person {
public static void main(String[] args){
4.3this的概述
this关键字特点
代表当前对象的引⽤
this的应⽤场景
⽤来区分成员变量和局部变量重名
案例演示

public class Demo6_Person {
 public static void main(String[] args){
 Person1 p1 = new Person1();
 p1.name = "张三" ;
 //p1.age = 17;
 //p1.speak();
 p1.setAge(17);
 System.out.println(p1.getAge());
 }
}
class Person1{
 String name;
 private int age;
 public void setAge(int a){ //设置年龄
 if(a > 0 && a < 200)
 age = a;
 else
 System.out.println("输⼊错误");
 }
 public int getAge(){ //获取年龄
 return age;
 }
 public void speak(){
 System.out.println(name + "..." + age);
 }
}

this关键字特点

  • 代表当前对象的引⽤

this的应⽤场景

  • ⽤来区分成员变量和局部变量重名
 class Demo7_Phone {
         public static void main(String[] args) {
         Phone1 p1 = new Phone1();
         p1.setBrand("三星");
         p1.setPrice(5288);
         System.out.println(p1.getBrand() + "..." + p1.getPrice());
         p1.call();
         p1.sendMessage();
         p1.playGame();
         }
        }
        /*
    ⼿机类
     属性:品牌brand,价格price
     ⾏为:打电话call,发短信sendMessage,玩游戏,playGame
    */

class Phone1 { //java bean
 private String brand; //品牌
 private int price; //价格
 public void setBrand(String brand) { //设置品牌
 this.brand = brand;
 }
 public String getBrand() { //获取品牌
 return this.brand; //this.可以省略,你不加系统会默认给你加
 }
 public void setPrice(int price) { //设置价格
 this.price = price;
 }
 public int getPrice() { //获取价格
 return price;
 }
 public void call() { //打电话
 System.out.println("打电话");
 }
 public void sendMessage() { //发短信
 System.out.println("发短信");
 }
 public void playGame() { //玩游戏
 System.out.println("玩游戏");
 }
}

构造⽅法

构造⽅法作⽤

  • 给对象的数据(属性)进⾏初始化

构造⽅法格式

  • ⽅法名和类名相同(字⺟⼤⼩都⼀样)
  • 没有返回值类型,连void都没有
  • 没有具体的返回值return;
public Person(){
		//無參狗早方法
}
//有參構造
public Person(String name,int age){
		this.name=name;
		this.age=age;
		System.out.println("有参的构造函数");
}
  • 如果我们没有给出构造函数,系统将⾃动提供⼀个⽆参构造函数
  • 如果我们给出了构造函数,系统将不再提供默认的⽆参构造函数

成员变量两种赋值⽅式

  1. setXxx()⽅法——修改属性值
  2. 构造⽅法——给对象中属性进⾏初始化

創建對象

Student s = new Student();

步驟

  1. main 主⽅法进⼊⽅法区
  2. Student Student.class加载进⼊⽅法区内存
  3. s 声明⼀个Student引⽤类型s进栈,并赋予地址
  4. new Student 在堆内存中创建对象
  5. String name 成员变量默认初始化——没有赋值的值类型为0,没有赋值的引⽤类型为null
  6. String name = “张三” 成员变量显示初始化
  7. name = “mousse” 构造⽅法进栈,对对象中的属性赋值,构造⽅法弹栈
  8. Student s = new Student() 将对象的地址值赋值给s

Static關鍵字

static关键字特点

  • 随着类的加载⽽加载

  • 优先于对象存在

  • 被类的所有对象共享

  • 可以通过类名调⽤

  • 可以通过类对象名调⽤,但推荐使⽤类名调⽤

  • static修饰的内容⼀般与类相关,并称为类成员

public class Book1_Static {
 public static void main(String args[])
 {
 Person2 p1 = new Person2();
 p1.name =" 张三";
 p1.country = "中国";

 Person2 p2 = new Person2();
 p2.name =" 李四";
 //p2.country = "中国";
 p1.speak();
 p2.speak();
 //静态多了⼀种调⽤⽅式,可以通过类名
 Person2.country ="中国";
 System.out.println(Person2.country);
 }
}
class Person2{
 String name;
 static String country;

 public void speak(){
 System.out.println(name + "..." + country);
 }
}

在静态⽅法中没有this关键字

  • 静态是随着类的加载⽽加载,this是随着对象的创建⽽存在

  • 类⽐对象先存在

静态⽅法只能访问静态的成员变量和静态的成员⽅法
静态⽅法

  • 成员变量:只能访问静态变量
  • 成员⽅法:只能访问静态成员⽅法

⾮静态⽅法

  • 成员变量:可以访问静态变量,也可以访问⾮静态变量
  • 成员⽅法:可以⽅法静态⽅法,也可以访问⾮静态⽅法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值