2020-12-28

本文是Java学习笔记,主要介绍了Java面向对象中变量与构造器的知识。详细阐述了成员变量与局部变量在位置、作用范围、默认值等方面的区别,还说明了八大基本类型成员变量的默认值,以及构造器的定义、使用和与方法的区别,并给出了构造器使用的代码详解。

java 学习笔记1

一、java面向对象之变量与构造器

成员变量与局部变量

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

区别1:代码中位置不同
成员变量:在类中方法外定义的变量
局部变量:方法中定义的变量 代码块中定义的变量
区别2:代码的作用范围不同
成员变量:可以作用到类中的很多方法
局部变量:当前一个方法(当前的代码块)
区别3:是否有默认值
成员变量:有
局部变量:没有
区别4:初始化
成员变量不需要初始化 后续使用时再赋值
局部变量一定要初始化 不然直接使用时报错
区别5:内存中位置不同
成员变量:堆内存
局部变量:栈内存
区别6:作用时间不同
成员变量:当前对象从创建到销毁
局部变量:当前方法从开始执行到执行完毕

八大基本类型的成员变量默认值

如下:
八大基本类型的默认值

构造器的定义与使用

构造器——>给属性赋值的作用

构造器与方法的区别:
(1)构造器没有方法的返回值类型
(2)构造器内部不能有return语句
(3)构造器的名字很特殊,必须和类名一样
构造器的作用:
作用其实就是为了给属性赋值
构造器注意的一点:
一般不会在空构造器中进行初始化,那样的话每个对象的属性就都一样了
开头会写一个空构造器,一般会重载构造器,然后在重载的构造器中进行赋值操作,(在重载构造器以后,系统不会自动生成空构造器)

构造器的使用代码详解

package play;

public class Person {
	//定义一个空构造器
	public Person() {
		
	}
	//定义有参构造器  构造器的重载
	public Person(String name,double height,int age){
		this.name = name;		//使用this 关键字 特指调用这个构造器的那个对象
		this.height = height;
		this.age = age;
	}
	
	//定义Person的属性
	String name;
	double height;
	int age;
	//定义方法
	public void eat(){
		System.out.println("我爱干饭!");
	}
	public static void main(String[] args) {
		//调用有参构造器 给 cc 的属性赋值
		//创建一个 对象
		Person cc1 = new Person("陈城", 176, 21);
		//输出 对象 的属性值
		System.out.println(cc1.name);
		System.out.println(cc1.height);
		System.out.println(cc1.age);
		cc1.eat();
		

	}
}

总结

类的创建和对象的创建
两种变量的各自不同点
构造器的使用以及 this 关键字的用法

以下是一个满足你需求的 Python 程序,它会循环每 2 秒向日志文件 `my.log` 写入一行日志,格式为序号加时间,并且每次写入的内容会立即显示在终端上。即使程序被强行结束,再次运行时序号会从上次结束的地方继续: ```python import time import os LOG_FILE = "my.log" COUNT_FILE = "counter.dat" # 读取或初始化计数器 if os.path.exists(COUNT_FILE): with open(COUNT_FILE, "r") as f: line_count = int(f.read().strip()) else: line_count = 0 try: while True: current_time = time.ctime() log_line = f"{line_count + 1}. {current_time}\n" # 写入日志文件 with open(LOG_FILE, "a") as f: f.write(log_line) f.flush() # 确保内容立即写入磁盘 os.fsync(f.fileno()) # 确保写入完成 # 打印到终端 print(log_line.strip()) # 更新计数器 line_count += 1 with open(COUNT_FILE, "w") as f: f.write(str(line_count)) time.sleep(2) except KeyboardInterrupt: print("\n日志写入程序已终止。") ``` ### 代码解释: 1. **`LOG_FILE`**:定义日志文件名 `my.log`。 2. **`COUNT_FILE`**:定义一个计数器保存文件,用于记录已经写入了多少行。 3. **读取计数器**: - 如果 `counter.dat` 文件存在,就读取其中的数字作为当前行号; - 否则从 0 开始。 4. **循环写入日志**: - 每次循环生成一行日志,格式为 `序号. 时间`; - 使用 `with open(..., "a")` 以追加模式写入文件; - 使用 `f.flush()` `os.fsync()` 确保写入内容立即刷新到磁盘; - 打印到终端; - 更新计数器并保存到 `counter.dat`; - 每次写入后 `line_count` 增加 1。 5. **异常处理**: - 使用 `try-except` 捕获 `KeyboardInterrupt`(Ctrl+C)以优雅退出。 --- ### 注意事项: - `counter.dat` 文件用于持久化保存行号,确保程序重启后序号连续。 - `my.log` 文件会不断追加内容,不会覆盖旧内容。 - 若你使用的是 Linux/macOS,可以使用 `tail -f my.log` 实时查看日志内容。 --- ### 相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值