Java学习笔记(32)—— 访问控制符

这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。


一、访问控制符

1.1 概述

  • 访问控制符用于控制一个类,或类中的成员的访问范围

public:该类和非该类的均能访问

protected:该类和该类的子类,同一个包内的成员也能访问

[defalut]:同一个包内的类可以访问

private:只有该类可以访问

​​​​​​​

1.2 选择原则

  • 尽量使用小范围
  • public 是与其他开发者的一个契约,约定公开的东西会尽量保持稳定不变
  • 小范围的好处,便于维护修改

​​​​​​​​​​​​​​​​​​​​​1.3 练习:学生抽奖

在一个类中,一般情况下,我们习惯将成员变量设置为privare类型,同时通过set/get方法提供对成员变量的修改与查询途径。

package 学生抽奖;

public class Student {
	private int id;
	private String name;
	private String gender;
	private int age;
	private int times;// 中奖次数
	
	public Student(int id, String name) {
		this(id,name,null,0,0);
	}
	
	public Student(int id, String name, String gender, int age, int times) {
		this.id = id;
		this.name = name;
		this.gender = gender;
		this.age = age;
		this.times = times;
	}
	
	@Override
	public String toString() {
		return id+","+name+","+gender+","+age+","+times;
	}

	public int getId() {
		return this.id;
	}
	
	public int getAge() {
		return this.age;
	}
	
	public int getTimes() {
		return this.times;
	}
	
	public String getName() {
		return this.name;
	}

	public String getGender() {
		return this.gender;
	}

	public void setTimes(int i) {
		this.times+=i;
	}

	public void setId(int id) {
		this.id = id;
	}
}
package 学生抽奖;
/*
 *	读取、写入与修改学生的数据与中奖次数的工具类
 */

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

public class StuIO {
	// ArrayList集合,用来存放所有的学生对象
	// 静态,原因是学生数据加载后,没必要加载多分一样的数据,仅有一份数据即可
	static ArrayList<Student> stu = new ArrayList<Student>();
	// 静态初始化块,类第一次被加载时执行,且只执行一次
	static {
		try {
			/*
			 *	读取数据 
			 *	之前用过的FileReader的read()方法一次读取一个字节;
			 *	BufferedReader readLine()读取一行字符串,读取结束后,再读返回null值;
			 *	结合FileReader和BufferedReader来协同读取数据,FileReader负责从文件
			 *	读取字符,FileReader可以以行为单位读取文本数据,二者协同实现字符串
			 *	(文本)的行读取
			 */
			BufferedReader in = new BufferedReader(new FileReader("d:/Students.txt"));
			
			// 死循环读取文本
			while(true) {
				// 读入指定文件的一行数据
				String line = in.readLine();
				// 判断文件读取是否结束,null为标志
				if(line == null) {
					System.out.println("读取结束!");
					break;
				}
				
				// 利用正则表达式匹配字符串中任意位置的空白,并删除空格
				line = line.replaceAll("\\s+", "");
				// 判断删除空格后,该行是否还有数据,或是空行
				if(line.length() == 0) {
					continue;// 如若是空行,则无需进行下一步的操作,直接跳至读取下一行
				}
				
				// 将处理后的行数据处理成Student对象
				Student s = strToStu(line);
				// 将该Student对象添加进泛型数组列表
				stu.add(s);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	private static Student strToStu(String line) {
		// 1,张三,男,23,0
		
		// .split(",")方法将读取的行以逗号为标志分割为5个部分,分别存入a字符串数组
		String[] a = line.split(","); // 参数为一个正则表达式
		Student s = new Student(
						Integer.parseInt(a[0]),// a[i]是String数组,对于int数据需要先解析为int类型
						a[1],
						a[2],
						Integer.parseInt(a[3]),
						Integer.parseInt(a[4]));
		return s;
	}
	
	// 类测试方法
//	public static void main(String[] args) {
//		for(int i =0;i<stu.size();i++) {
//			System.out.println(stu.get(i));;
//		}
//	}

	public static void save() {
		try {
			/*
			 *	FileWriter的write()方法 
			 */
			FileWriter out = new FileWriter("d:/Students.txt");
			
			// 循环变量每一个泛型数组中的Student对象并toString相应信息,写入指定文件
			for(int i =0;i<stu.size();i++) {
				Student s = stu.get(i);
				out.write(s.toString()+"\n");// txt文本的换行是\r\n,这是windows要求的
			}
			
			out.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}	
}
package 学生抽奖;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {
		// while死循环抽奖,回车继续
		while(true) {
			System.out.println("回车继续,exit退出");
			String s = new Scanner(System.in).nextLine();
		if(s.equals("exit")) {
			System.out.println("结束抽奖!");
			break;
		}
		// 获得Student对象的泛型数组列表
		ArrayList<Student> stu = StuIO.stu;
		// 随机取得下标[0,stu.size())
		Student obj = stu.get(new Random().nextInt(stu.size()));
		obj.setTimes(1);
		System.out.printf("恭喜%s,您中了大奖!",obj.getName());
		
		// 将改变的times写入文件,无需传数组列表参数,因为是static的
		// 直接将StuIo类中的泛型数组列表保存至文件
		StuIO.save();
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值