今天上午学习了私有的修饰符以及其作用
私有变量修饰符
私有变量修饰符是和public作用一样的修饰符,他是用来规定这个东西的访问权限的,如果是public,则全都可以进行访问,如果是private,则只有这个类中可以进行访问。用了这个来规定成员变量会让逻辑上更加方便
私有修饰符的使用
下面的代码尝试一下定义一个私有的变量,让别的类去访问
class Demo01
{
public static void main(String[] args){
A a = new A();
a.age = 18;
}
}
class A
{
private int age = 18;
}
但是咱们可以在定义私有变量的那里面定义一个方法来访问私有变量,亦或者可以定义方法来更改或者返回私有变量。这样子做可以逻辑上做简单如何做到简单的,下面讲述取值赋值的时候,就会体现逻辑上的简单了
赋值
咱们不能直接取访问成员变量,但是不能在类中写死,不然不管出来几个实体类,值都是一样的,而且没法更改。咱们就需要调用方法来进行赋值。并且写一个if条件判断看age是否大于0,大于0则赋值,小于0则提示输入有误
class Demo01
{
public static void main(String[] args){
A a = new A();
a.m1(18);
}
}
class A
{
private int age;
public void m1(int age){
if(age>0){
this.age = age;
}else{
System.out.println("输入有误");
}
}
}
这时候没有任何的输出的,咱们也不知道是否存入了,咱们再传进去一个负数试试
class Demo01
{
public static void main(String[] args){
A a = new A();
a.m1(-18);
}
}
class A
{
private int age;
public void m1(int age){
if(age>0){
this.age = age;
}else{
System.out.println("输入有误");
}
}
}
结果会提示输入有误,证明咱们写的还是可以的,至于是否存入数据了,咱们要看取值操作
取值
取值同上,咱们既然没有办法直接取值,咱们可以通过调用类里面的方法来取成员变量的值
class Demo01
{
public static void main(String[] args){
A a = new A();
a.m1(18);
System.out.println(a.m2());
}
}
class A
{
private int age;
public void m1(int age){
if(age>0){
this.age = age;
}else{
System.out.println("输入有误");
}
}
public int m2(){
return age;
}
}
结果输出了18,证明了咱们写的是正确的,也正确存入数据了
规范
在Java中,自定义类的存值和取值是需要有规范的,下面就是规范的写法
class A
{
private int age;
private String name;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
但是在自定义类中,咱们应该加上有参构造类和无参构造类,加上之后为
class A
{
private int age;
private String name;
public A(){}
public A(int age,String name){
this.age = age;
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
这就是一个类的完整写法
Java总结
- 见名思意
- 确保功能的唯一性
- 确保逻辑的灵活性
- 规则和代码没有关系
可变参
通过观察main方法,发现小括号里面写的是一个数组,这个其实是一种可变参,可以对其进行传值,也可以不进行传值。
而可变参的另外一种写法是:数据类型 … 变量名
class demo03
{
public static void main(String[] args){
B b = new B();
b.m();
}
}
class B
{
public void m(int ... a){
for(int i = 0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
发现没有输出,在重新写一下
class demo03
{
public static void main(String[] args){
B b = new B();
b.m(1,2,3,4,5,6,20,100,200);
}
}
class B
{
public void m(int ... a){
for(int i = 0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
发现可以输出输入的数字
方法重载
方法的重载是要求方法除了参数不同之外都相同,下面举个例子
class demo04
{
public static void main(String[] args){
sum(1,2);
sum(1,2,3);
}
public static void sum(int a,int b){
System.out.println(a+b);
}
public static void sum(int a,int b,int c){
System.out.println(a+b+c);
}
}
具体选什么方法取执行,要看参数的类型和参数的个数
练习
需求:定义一个学生类,属性有两个,学号和姓名。在main方法中定义两个学生并存入数组,然后输出数组中的学生数据
分析:
1.创建项目并进行测试
2.创建学生类并进行测试
- 学生类的位置:和上面的类应处于并列关系
- 格式:class 类名{}
3.在学生类中定义属性
- 格式:private 数据类型 变量名;.
4.在学生类中写出来构造方法
- 无参的:public 类名(){}
- 有参的:public 类名(成员变量){}
5.在学生类中写出来get和set方法
6.在main方法中定义两个学生对象
7.定义一个学生类型的数组,长度为2即可
8.在main下面写一个输出方法
- 方法的位置:和别的方法并列
- 方法的格式:修饰符 返回值类型 方法名(){}
9.在里面输出即可,注意取值应该用get方法
代码如下:
class Demo02
{
public static void main(String[] args){
Student s1 = new Student(1,"张三");
Student s2 = new Student();
s2.setId(2);
s2.setName("李四");
Student[] arr = {s1,s2};
print(arr);
}
public static void print(Student[] arr){
for(int i = 0;i<arr.length;i++){
if(arr[i] != null){
System.out.println("学号:"+arr[i].getId()+",姓名:"+arr[i].getName());
}
}
}
}
class Student
{
private int id;
private String name;
public Student(){}
public Student(int id,String name){
this.id = id;
this.name = name;
}
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public int getId(){
return id;
}
public String getName(){
return name;
}
}
学生管理系统
需求:这是一个很简单的学生管理系统,只在控制台输出即可,一共有五个功能:(1)查看学生信息(2)修改学生信息(3)添加学生信息(4)删除学生信息(5)退出系统。 学生信息有学号和姓名。要求main方法中只有一条代码,并且方法分的尽可能细。还要求定义出来一个学生类
分析:
1.创建方法并进行测试
2.创建学生类
- 位置:和上面的类并列
- 格式:class 类名{}
3.在学生类中定义对应的属性
- 格式:private 数据类型 变量名;
4.在学生类中定义构造类
- 格式:public 类名(){}
- 有参构造和无参构造都要写
5.定义对应属性的get和set方法
6.写main方法
7.写出输出菜单的方法
8.写出选择功能和实现用户选择之间的方法
9.写集合初始化的方法
10.写出查看学生信息方法
11.写出修改学生信息方法
12.写出删除学生信息的方法
13.写出增加学生信息的方法
完整代码如下:
import java.util.*;
class Demo01
{
public static void main(String[] args){
choose();
}
public static void menu(){
System.out.println("1:查看学生信息");
System.out.println("2:修改学生信息");
System.out.println("3:删除学生信息");
System.out.println("4:增加学生信息");
System.out.println("5:退出学生系统");
System.out.print("请输入1-5来实现对应的功能:");
}
public static void choose(){
ArrayList<Student> arr = init();
Scanner sc = new Scanner(System.in);
for(;;){
menu();
int a = sc.nextInt();
if(a == 1){
show(arr);
}
else if(a == 2){
update(arr);
}
else if(a == 3){
delete(arr);
}
else if(a == 4){
add(arr);
}
else if(a == 5){
System.out.println("退出成功");
break;
}
else{
System.out.println("请输入1-5的数字");
}
}
}
public static ArrayList<Student> init(){
ArrayList<Student> arr = new ArrayList();
Student s1 = new Student(1,"张三");
Student s2 = new Student(2,"李四");
arr.add(s1);
arr.add(s2);
return arr;
}
public static void show(ArrayList<Student> arr){
for(int i = 0;i<arr.size();i++){
System.out.println("学号:"+arr.get(i).getId()+",姓名:"+arr.get(i).getName());
}
}
public static void update(ArrayList<Student> arr){
Scanner sc = new Scanner(System.in);
System.out.print("请输入要修改的学号:");
int id = sc.nextInt();
for(int i = 0;i<arr.size();i++){
if(arr.get(i).getId() == id){
System.out.print("输入新的学号:");
arr.get(i).setId(sc.nextInt());
System.out.print("输入新的姓名:");
arr.get(i).setName(sc.next());
System.out.println("修改成功");
}
}
}
public static void delete(ArrayList<Student> arr){
Scanner sc = new Scanner(System.in);
System.out.print("请输入要删除的学号:");
int id = sc.nextInt();
for(int i = 0;i<arr.size();i++){
if(id == arr.get(i).getId()){
arr.remove(i);
System.out.println("删除成功");
}
}
}
public static void add(ArrayList<Student> arr){
Scanner sc = new Scanner(System.in);
Student s = new Student();
System.out.print("请输入要添加的学生的学号:");
s.setId(sc.nextInt());
System.out.print("请输入要添加的学生的姓名:");
s.setName(sc.next());
arr.add(s);
System.out.println("添加成功");
}
}
class Student
{
private int id;
private String name;
public Student(){}
public Student(int id,String name){
this.id = id;
this.name = name;
}
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public int getId(){
return id;
}
public String getName(){
return name;
}
}