Java学习与进阶(2)——面向对象(1)——类和对象及其内存分析、this、static

面向对象本质:以类的方式来组织代码,以对象的方式来封装数据 

1.引用类型

2.类的属性

类的属性如果没有初始化的话,会执行默认初始;而函数内的局部变量没有被初始化的话,则它的值是未定义的

3.类的方法

Java只有值传递,没有引用传递

4.内存分析

内存分析示例代码1:

public class Student {
	//属性
	String name;
	int id;
	int age;
	String gender;
	int weight;
	
	//方法
	public void study()
	{
		System.out.println(name+"在学习");
	}
	
	public void say(String sname)
	{
		System.out.println(name+"在向"+sname+"问好!");
	}
	
	public static void main(String[] args)
	{
		Student s1=new Student();
		s1.name="张三";
		s1.study();
		
		Student s2=new Student();
		s2.age=18;
		s2.name="李四";
		s2.say(s1.name);
	}
}

图解内存:

内存分析示例代码2:

Student.java

public class Student {
	//属性
	String name;
	int id;
	int age;
	String gender;
	int weight;
	
	Computer c;
	
	//方法
	public void study()
	{
		System.out.println(name+"在学习");
	}
	
	public void say(String sname)
	{
		System.out.println(name+"在向"+sname+"问好!");
	}
}

Computer.java

public class Computer {
	String brand;
	int cpuSpeed;
}

Test2.java

public class Test2 {
	public static void main(String[] args)
	{
		Student s1=new Student();
		s1.name="张三";
		s1.age=18;
		
		Computer c=new Computer();
		c.brand="联想";
		c.cpuSpeed=100;
		
		s1.c=c;
		
		c.brand="戴尔";
		System.out.print(s1.c.brand);
	}
}

图解内存2:

常量池在创建的时候,会检查其他常量池中是否已经有该常量,有的话不会重复

最后从结果发现,操作对象就是在操作引用,s1对象中存放的只是c的引用(内存地址),所以改变c的值,会改变s1中属性c的值

5.垃圾回收机制

垃圾回收是回收没有人使用的对象

6.构造方法

唯一的功能:构造类的对象,经常用来初始化类的属性

构造方法本质上会返回构造好的对象的地址,但不需要我们来定义

7.static关键字

示例及内存分析:

Student.java


public class Student {
	//属性
	String name;
	int id;
	
	static int ss;

	public static void printSS()
	{
		System.out.println(ss);
	}

	public void study()
	{
		System.out.println(name+"在学习");
	}
	

}

Test.java

public class Test2 {
	public static void main(String[] args)
	{
		Student.ss=24;
		Student.printSS();
		
		Student s1=new Student();
	}
}

在静态方法中不能调用非静态属性和方法,因为静态方法从属于类,非静态方法从属于对象,而在静态方法被加载的时候,不一定存在对象,即便存在对象,那到底调用哪个对象的属性和方法呢

但可以在非静态方法中调用静态属性和方法,因为在对象被创建的时候,静态属性和方法早就加载好了,而且调用的地址也是唯一的,在方法区中,所以它的调用完全是清晰明了的

8.this关键字

因为代码跟对象是分开的,所以对象的方法要通过传入this参数来区分this指针

this不能用于static是因为static方法不能调用非static属性和方法

this的另一特殊用法:使用"this(参数)"在一个构造函数中调用另一个构造函数,并且只能放在第一条语句

class Student
{
    String name;

    public Student(String name)
    {
        this();
        this.name=name;    
    }
    public Student()
    {
        System.out.print(name);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值