JavaSE 面向对象01

本文深入探讨面向对象编程的核心概念,包括数据结构与算法、封装、继承与多态,以及类之间的关系如依赖、聚合和继承。同时,解析了构造器、对象变量、this关键字的用法,以及final、private、static修饰符的作用。文章还详细说明了方法参数的传递机制,对象初始化过程,以及包的使用和作用域。

在这里插入图片描述

概述

程序: 数据结构&算法。
面向对象:先决定如何组织数据,再决定如何操作数据;先设计类,再添加方法。
instance:创建类的实例也就是由类构造对象。
封装:将数据行为组合起来,并对对象的使用者隐藏数据的实现方式;实例域(instance field)存放数据,行为即方法(method)操作数据。
类之间的关系:依赖、聚合、继承。

  • 依赖:use、偶然性、临时性。例如类B作为类A的方法参数,局部变量,返回值等。
  • 关联:必然的、长期的。例如类B作为类A的成员变量。
  • 聚合:has、加强版的关联,整体和部分的关系。
  • 继承:is、
    构造器:创建类的对象并初始化实例域(属性)。
    对象变量:引用对象,而不是变量处包含了对象。

  • final
    修饰基本数据类型:值不可变。
    在这里插入图片描述
    修饰引用:引用的对象不可变,但是引用的对象的属性可以变。
public class Finaltest {

	public static void main(String[] args) {
		final StringBuilder sb = new StringBuilder("abc");
		sb.append("de");
		System.out.println(sb);
        
	}

}

在这里插入图片描述

  • this
    表示隐式参数,可以将实例域和局部变量区分。
    构造器的第一行写this,表示这个构造器将调用类的另一个构造器。
  • private
    私有方法不会被外部的其他类调用
public class S1 {
	private int numb;
	private String name;

	public S1(int numb, String name) {
		super();
		this.numb = numb;
		this.name = name;
	}

	private int getNumb() {
		return numb;
	}

	public String getName() {
		return name;
	}

}

在这里插入图片描述

  • static 静态
  • 静态方法不能访问实例域(成员变量),因为它不能操作对象。
    在这里插入图片描述
  • 静态方法可以通过类调用,也可以通过类的对象调用,但是后者容易造成混淆,实际上方法的执行结果和对象没有任何关系。
    (前边学的线程sleep是不是因为这个?)是的。
    在这里插入图片描述
    在这里插入图片描述

方法参数

  • 按值调用:方法接收的是调用者提供的值。
  • 按引用调用 :方法接收的是调用者提供的变量地址。
    java只有一种情况,传值调用,即方法得到的值是参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。
public class CallByTest {
	public static void main(String[] args) {
        int a = 1;
        int b = 2;
        swap(a,b);
        System.out.println("a="+a+" b="+b);
	}
	public static void swap(int num1, int num2) {
		int c = num1;
		num1 = num2;
		num2 = c; 
	}
}

在这里插入图片描述
在这里插入图片描述

  • 方法参数是对象的引用时
    拷贝的引用与原引用引用相同的对象。
public class CallByTest {
	public static void main(String[] args) {
//        Integer a = 1;
//        Integer b = 2;
//        swap(a,b);
//        System.out.println("a="+a+" b="+b);
		A a = new A(1);
		B b = new B(2);
		System.out.println("a="+a.num+" b="+b.num);
		swap(a,b);
		System.out.println("a="+a.num+" b="+b.num);
	}

	public static void swap(A oba, B obb) {
        int c = oba.num;
        oba.num = obb.num;
        obb.num = c;
        System.out.println("交换完毕");
	}
}

class A {
	int num;

	public A(int a) {
		this.num = a;

	}
}

class B {
	int num;

	public B(int a) {
		this.num = a;

	}
}

在这里插入图片描述
在这里插入图片描述

  • 如何证明java中只有 按值调用
    对象引用也是按值调用的,即方法不能让对象参数引用一个新的对象。例子中对象本身直接参与交换。
public class CallByTest {
	public static void main(String[] args) {
//        Integer a = 1;
//        Integer b = 2;
//        swap(a,b);
//        System.out.println("a="+a+" b="+b);
		A a1 = new A(1);
		A a2 = new A(2);

		System.out.println("a1=" + a1.num + " a2=" + a2.num);
		swap(a1, a2);
		System.out.println("a1=" + a1.num + " a2=" + a2.num);
	}

	public static void swap(A oa, A ob) {
		A oc = oa;
		oa = ob;
		ob = oc;
		System.out.println("交换完毕");
	}
}

class A {
	int num;

	public A(int a) {
		this.num = a;

	}
}

在这里插入图片描述

对象

  • 如果没有在构造方法中显式地给对象实例域赋值,会自动滴给实例域赋予默认值,0、null、false。这么做不好,影响可读性。
  • 编写类没有无参构造,系统会自动提供一个无参构造;如果显示声明了有参构造,系统不再自动提供无参构造,使用无参构造创建新对象会报错。
实例域初始化
  • 构造器中赋值,有参构造。
  • 类声明时赋值,这样执行构造器之前先进行赋值操作,所有的对象实例域的值都相同。
  • 对象初始化块,就是一个代码块,建议放在实例域后面。先运行该初始化块,再执行构造器的主体部分。
  • 静态初始化:如果有,类在第一次加载时会进行静态初始化,之后再创建类的对象不会再进行这种初始化。
  • 执行顺序:
    在这里插入图片描述

  • 将类组织起来,可以避免命名冲突。
  • 使用方式:类名之前加完整的包名java.time.LocalDate today = java.time.LocalDate.now();;import导包。
  • 包作用域:没指定public、private 即默认的,default。
内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
### JavaSE 面向对象编程概念详解 #### 类与对象的概念 面向对象编程的核心在于模拟现实世界中的实体及其行为。在Java中,通过定义`类`(Class)来描述具有共同属性和行为的对象模板[^1]。 - **类(Class)** 是创建对象(Object)的蓝图或原型,它包含了数据成员(字段/属性)以及成员函数(方法),用于表示特定类型的实例化个体。 - **对象(Object)** 则是基于此类的具体存在形式;每一个对象都是某个具体类的一个实例。当声明并初始化了一个新对象时,实际上就是在内存里分配了一块空间给这个新的实体,并赋予其初始状态。 ```java // 定义一个简单的Person类 public class Person { String name; // 成员变量 (属性) public void sayHello() { // 方法 System.out.println("Hello, my name is " + this.name); } } ``` #### 变量的作用域 了解不同种类的变量对于编写清晰可维护代码至关重要。主要分为两类: - **成员变量(属性)**: 属于整个类而非单个方法,在类内部任何地方都可以访问到它们; - **局部变量**: 仅限于所在的方法体内有效,通常作为临时存储使用,比如循环计数器或是计算过程中的中间结果等[^2]。 ```java public class Example { int memberVariable = 0; public void exampleMethod(){ int localVariable = 1; // 此处可以访问memberVariable 和localVariable } // 外部无法直接访问localVariable } ``` #### 封装、继承与多态性 这是面向对象程序设计中最基本也最重要的三个特征[^3]: - **封装**(Encapsulation): 把对象的状态信息隐藏起来,只暴露有限的操作接口供外部调用者交互。这有助于保护数据的安全性和一致性,同时也简化了系统的复杂度管理。 - **继承**(Inheritance): 子类能够自动获得父类所有的公共属性和服务,从而实现代码重用的目的。需要注意的是,虽然Java不支持多个直接基类的同时派生,但是可以通过接口的形式间接达成类似效果。 - **多态(Polymorphism)**: 同一操作作用于不同的对象上会产生各异的结果表现形式。这种灵活性允许开发者写出更加通用灵活的应用逻辑结构。 ```java class Animal{ public void makeSound(){} } class Dog extends Animal{ @Override public void makeSound(){System.out.println("Bark");} } class Cat extends Animal{ @Override public void makeSound(){System.out.println("Meow");} } Animal dog=new Dog(); dog.makeSound(); // 输出 Bark Animal cat=new Cat(); cat.makeSound(); // 输出 Meow ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值