java基础-面向对象01


p174-

面向对象编程上

三条主线

  1. JAVA类以及类的成员、属性、方法、构造法;代码块、内部类
  2. 面向对象的三大特征:封装、继承、多态
  3. 其他关键字:this,super,static,abstract,interface,package,Import;

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

persion类

p178

package persion;
// 类和对象的使用(面向对象思想的实现)
// 1.创建类,设计类的成员
// 2.创建类的对象
// 3.通过对象、属性或对象、方法调用对象的结构

// 测试类
public class persion {
    public static void main(String[] args) {
        // 创建persion1对象
        persion1 p1 = new persion1();
         // 调用
        p1.name = "tom";
        p1.isMale = true;
        System.out.println(p1.name);
        
        // 调用方法
        p1.eat();
        p1.sleep();
        p1.talk("Chinese");
    }
}

class persion1 {
    // 属性
    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);
    }

}

p180
如果创建了一个类的多个对象,则每个对象独立拥有一套类的属性(非static的);这意味着,如果我们修改一个对象的属性a,则不影响另一个对象的属性a的值;

对象的内存解析

p181

在这里插入图片描述

堆(heap)

此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在java虚拟机规范中的描述是:所有的对象实例以及数组都要在对上分配。

栈 (stack)

是指虚拟机的栈。虚拟机栈用于存储局部变量等。局部变量表存放在了编译器可知长度的各种基本数据类型(boolean,byte、char、int、short、float、long、double)、对象引用(reference类型,他不等同于对象本身,是对象在堆内存放的首地址)。方法执行完,自动释放。

方法区(method area)

用于存储已经被虚拟机加载的类型信息、常量
、静态变量、即时编译器编译后的代码等数据。

Persion p1 = new Persion();
p1.name = "tom";
p1.isMale = true;
Persion p2 = new Persion();
System.out.println(p2.name);
Persion p3 = p1;
p3.age = 10;
System.out.println(p3.name);

代码中的p1,p2,p3 是存放在栈中的指针,指向的是堆中的对象的首地址;
在这里插入图片描述

属性的使用

P182,p183

属性(成员变量)vs 局部变量

  • 相同点

  • 不同点

1 在类中声明的位置不同
属性:直接定义在类的一对{}内
局部变量:生命在方法内、方法形参、代码块内、构造器形参、构造器内部的变量;
2 关于权限修饰符的不同
属性:可以在生命属性时,知名其权限,使用权限修饰符。
常用的权限修饰符:private,public,protected,缺省;
局部变量:不可以使用权限修饰符
3 默认初始化值
属性:类的属性,根据其类型,都有默认的初始化值
整型(byte,short、int、long):0
浮点型(float,double)0.0
字符型(char)0 或者(’\u0000’)
布尔类型(boolean)false
引用数据类型(类,数组,接口):null

局部变量:没有默认初始化值,再调用局部变量必须显式赋值;特别地,形参在调用时,我们赋值即可。

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

方法的声明与使用

p184 、p185、p186

方法的声明: 权限修饰符 返回值类型 函数名(形参列表){} NOTE : static、final、abstrat 来修饰方法,以后再讲。

权限修饰符: private,public,缺省,proteced;

返回值类型关键字;:有返回值vs无返回值
如果方法有返回值,必须在方法声明时,指定返回值类型,同时函数体中需要用return;

如何方法没有返回值,则方法声明时,使用void,通常情况下,函数体中不需要返回值,也可以加上return;表示结束此方法的意思;

我们定义方法时需不需要返回值?经验

方法名:标识符的要求

形参列表:

方法体:方法功能的体现

return关键字的使用

return关键字后面不可以声明执行语句。

P188

package CircleTest;

public class CircleTest {
    
}

// Circle
class Circle {
    double radius;
    double area;
    // 求圆的面积
    public double findArea() {
        area =Math.PI * radius * radius;
        return area;
    }
}

---------------------------------------------P193

匿名对象

理解:我们创建的对象,没有显示的肤质给一个变量名,则为匿名对象。
特征:匿名对象在其生命周期只能调用一次

重载 overload

定义:

在同一个类,允许一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。
和返回值类型、方法的权限修饰符、方法体、形参变量名无关。
通过对象调用方法时,如何确定某个指定的方法:
①方法名
②参数列表

Varargs(variable number of argument)

javaSE 5.0中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方法,来传递个数可变的实参。

public class StringUtil {
    public static void main(String[] args) {
        StringUtil teSt = new StringUtil();
        teSt.show(12);
        teSt.show("hello");
        teSt.show("hello", "jack"); 
    }
        public void show(int i) {
           System.out.println("show(int i)"); 
        }
        
        public void show(String s) {
            System.out.println("show(String s)"); 
        }
        // 可变参数个数机制
        public void show(String ...strs) {
            System.out.println("show(String ...strs)"); 
        }
        // 与上面的函数冲突。
        public void show(String[] strs) {
            System.out.println("show(String ...strs)"); 
        }
        
}

具体使用

① 可变个数形参的格式:数据类型 …变量名
② 当调用可变个数形参的方法时,传入的参数个数可以是0个,1个,2个。。。
③ 可变个数形参的方法与本类中的方法名相同,形参不同的方法之间构成重载。
④ 可变个数的形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,两者不能构成重载。
⑤ 可变个数形参在方法的形参中,必须声明在末尾,而且只有一个可变个数形参

方法参数的值传递机制

① 如果变量是基本数据类型,此时赋值的是变量所保存的数据值

public class ValueTransferTest {
    public static void main(String[] args) {
    int m = 10;
    int n = m;
    System.out.println("m = " + m +", n = " + n);
    n = 20;
    System.out.println("m = " + m +", n = " + n);
    
    System.out.println("------引用数据类型----------");
    Order o1 = new Order();
    o1.orderID = 1001;
    Order o2 = o1; // 赋值以后,o1 和 o2的地址值相同,都指向了同一个对象实体
    System.out.println("o1.orderID = " +o1.orderID + " , o2.orderID = " + o2.orderID);
    o2.orderID = 1002;
    System.out.println("o1.orderID = " +o1.orderID + " , o2.orderID = " + o2.orderID);
}
}

class Order{
    int orderID;
}

p212

②如果参数就是引用数据类型,此时实参付给形参的是实参存储数据的地址值。
代码如下:

package ValueTranser;

public class ValueTranserTest {
    public  static void main(String[] args) {
        Data data = new Data();
        data.m = 10;
        data.n = 20; 
        System.out.println("m = " + data.m +" , n = " + data.n);
        
        // 交换
        ValueTranserTest test = new ValueTranserTest();
        test.swap(data);
        System.out.println("m = " + data.m +" , n = " + data.n);
    }
    
    public void swap(Data data) {
    int temp = data.m;
    data.m = data.n;
    data.n = temp;
}
}
class Data{
    int m;
    int n;
    
}

内存模型分析

联系6

package ValueTranser;

public class PassObject {
    public static void main(String[] args) {
        PassObject testObject = new PassObject();
        Circle c = new Circle();
        testObject.printAreas(c, 5);
    }
    
        public void printAreas(Circle c, int time) {
            System.out.println("Radius \t\tArea");
            for (int i = 1; i < time; i++) {
                // 设置半径
                c.radius = i;
                System.out.println(c.radius + "\t\t" + c.findArea());
            }
        }
}
package ValueTranser;

public class Circle {
    double radius;
    public double findArea() {
        return Math.PI * radius *radius;
    }
}


p216

递归 略


p221

封装

程序设计的追求 高内聚,低耦合
① 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
② 低耦合 仅对外暴露少量的方法用于使用。

package Animal;
/*
   *   面向对象的特征之一:封装与隐藏
 *  问题的引入
 *  当我们创建一个类的对象以后,我们可以通过“对象”, ”属性“
 *  的方式,对对象的属性进行赋值,这里,赋值的操作要受到数据类型
 *  和存储范围的制约。
*  
 *  封装行的体现
 *  我们将类的属性私有化,同事,提供公共的方法的获取和设置改属性
 *  
 *  ② 不对外暴露酥油的方法
 *  单例模式
 *  
 */
public class AnimalTest {
    public static void main(String[] args) {
        Animal a = new Animal();
        a.nameString = "大黄";
        a.age = 1;
        //a.legs = 4;
        a.setlegs(3);
        a.show();
        a.setlegs(-1);
        a.show();
    }
}
class Animal{
    String nameString;
    int age;
    private int legs;
    
    public void eat() {
        System.out.println("动物进食");
    }
    
    public int getLegs() {
        return legs;
    }
    public void setlegs(int i) {
        if (i > 0) {
            legs = i;
        }
        else {
            legs = 0;
        }
    }
    public void show() {
        System.out.println("name = " +nameString + " , age = " +
    age + " , legs = " + legs);
    }
}

权限

封装的体现:需要权限修饰符来配合
① java的四种权限(从小到大)
private:
缺省:
protected:
public:

修饰符类内部同一个包不同包的子类同一个工程
privateyes
缺省yesyes
protectedyesyesyes
publicyesyesyesyes

② 四种权限可以修饰的类以及类的内部结构:属性、方法、构造器、内部类
③ 具体的,四种权限可以用来修饰类的内部结构:属性、方法、构造器、内部类
修饰类的话只能是缺省和public;


P224

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象是一种程序设计的思想,它将程序中的数据和对数据的操作封装在一起,形成对象。对象是类的一个实例,类定义了对象的属性和行为。在Java中,面向对象的概念包括类与对象的关系、封装、构造函数、this关键字、static关键字以及设计模式等方面。 设计模式是在软件设计中常用的解决问题的经验总结,它提供了一套可重用的解决方案。在Java中,单例设计模式是一种常见的设计模式之一,它保证一个类只有一个实例,并提供一个全局访问点。通过使用单例设计模式,可以确保在程序中只有一个对象实例被创建,从而节省了系统资源并提高了性能。 通过使用单例设计模式,可以实现以下效果: - 限制一个类只能有一个实例。 - 提供一个全局访问点,使其他对象可以方便地访问该实例。 - 保证对象的唯一性,避免多个对象的状态不一致。 在Java中,实现单例设计模式有多种方式,包括饿汉式、懒汉式、双重检测锁等。每种方式都有各自的特点和适用场景,开发者可以根据具体的需求选择合适的实现方式。设计模式是一种通用的解决问题的方法,它可以在面向对象的程序设计中提供灵活、可复用的解决方案。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [计算机后端-Java-Java核心基础-第15章 面向对象07 14. 设计模式与单例设计模式.avi](https://download.csdn.net/download/programxh/85435560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [完整版Java全套入门培训课件 Java基础 03-面向对象(共18页).pptx](https://download.csdn.net/download/qq_27595745/21440470)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值