Java之路 - 面向对象、Scanner、Random、ArrayList
1.创建类
成员变量 - - 既属性
成员方法 - - - public void eat(){} 没有static !!
实例化格式: 类名称 对象名称 = new 类名称();
使用对象类型作为方法的参数: 代码:
public class FaceObject { public static void main(String[] args) { Student s1 = new Student(); System.out.println(s1.age); s1.eat(); meetingMethod(s1); } public static void meetingMethod(Student x){ System.out.println(x.age); x.eat(); } }
2.局部变量和成员变量的不同
1.定义的位置不同!!!
局部变量,在方法的内部
成员变量,在方法的外部,直接写在类当中
2.作用范围不一样!!!
局部变量,只有方法当中才可以使用
3.默认值不一样
局部变量,没有默认值
成员变量,如果没有赋值,默认会有一个起始值,规则和数组一样
4.内存的位置不一样
局部变量:位于栈内存
成员变量:位于堆内存
5.生命周期
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象垃圾回收而消失
3. Private关键字
private的含义
1. private是一个权限修饰符,代表最小权限。
2. 可以修饰成员变量和成员方法。
3. 被private修饰后的成员变量和成员方法,只在本类中才能访问。
可以通过setXxx 和 getXxx 的方法对成员变量进行限定:
public class Student{ //成员变量 String name; private int age; //成员方法 public void introduce(){ System.out.println("大家好,我是" + name + "年龄:" + age ); } //专门用于向成员变量age设置数据 public void setAge( int num){ if(num >= 0 && num <= 100){ age = num; }else{ System.out.println("您输入的数据不合理"); } } //这个方法用于获取age数据 public int getAge(){ return age; }
public boolean isMale(){ //布尔值的getter方法比较特殊
return true;
} }
此时其他类想访问时就只能通过setter和getter方法对age进行设定和取值了
4.this关键字
谁调用的方法,谁就是this
用于类内部方法的参数和成员变量重名时区分
5.构造方法
一个完整的类:
public class Student{ private String name; private int age; private boolean male; //无参数的构造方法 public Student(){} //全参数的构造方法 public Student(String name, int age, boolean male){ this.name = name; this.age = age; this.male = male; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isMale() { return male; } public void setMale(boolean male) { this.male = male; } }
6.API、Scanner类
API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。
这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
只有java.lang下的类不需要导包,其他都需要 import+路径.类名称; 来进行导入
Scanner类的功能可以实现键盘输入,输入数据到程序当中
(1)获取键盘输入的数字或者字符串
// System.in 表示从键盘输入 Scanner s1 = new Scanner(System.in); int num = s1.nextInt(); //其实这里是把获取的字符串转换为了数字 System.out.println("用户在键盘输入的数字为" + num); //获取键盘输入的字符串 String str = s1.next(); if(str != "小三"){ System.out.println("你不是我的主人!");
7.匿名对象
只有右边的创建对象,没有左边的赋值语句 匿名对象只能使用唯一的一次,下次再用不得不在创建一个新对象;
使用场景:
public class DemoScanner{ public static void main(String[] args) { //匿名对象的使用 int num = new Scanner(System.in).nextInt(); System.out.println("输入的数值为" + num); } }
匿名对象作为方法的参数和返回值的情况:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class DemoScanner{ public static void main(String[] args) { //匿名对象的使用 int num = new Scanner(System.in).nextInt(); System.out.println("输入的数值为" + num); //Scanner匿名对象作为参数传入方法中 methodS(new Scanner(System.in)); //从方法中获取匿名对象并使用 Scanner s1 = methodReturn(); int num1 = s1.nextInt(); System.out.println(num1); } public static void methodS(Scanner s){ int num = s.nextInt(); System.out.println("输入的是" + num); } public static Scanner methodReturn(){ return new Scanner(System.in); } }
8.Random类 - 用来生成随机数字
nextInt()方法:生成的数字有正负
它的重载方法可以加参数,参数为左闭右开区间 nextInt(3) 的区间为[0-3)
练习:随机生成13到25的数字
public class DemoRandom { public static void main(String[] args) { Random r = new Random(); //随机生成13到25的数字 for (int i = 0; i < 10; i++) { int num1 = r.nextInt(13)+13; System.out.println(num1); } } }
数字猜谜游戏:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.util.Random; import java.util.Scanner; public class DemoRandom { public static void main(String[] args) { int snum = new Random().nextInt(100); System.out.println(snum); while(true) { System.out.println("请输入您猜的数字"); int num = new Scanner(System.in).nextInt(); if (num > snum) { System.out.println("你猜错啦!数字大了"); } else if(num == snum){ System.out.println("回答correct"); break; }else{ System.out.println("数字小了"); } } System.out.println("恭喜回答正确游戏结束"); } }
8.ArrayList <E> 集合
<E> 指的是 < - - - 泛型 : 也就是装在集合当中的所有元素,全都是统一的什么类型。
!!!泛型只能是引用类型,不能是基本类型!
直接打印得到的不是地址值,而是内容
(1)public boolean add(E,e)方法 - - - 添加元素 必须和创建类型一致 返回值 代表添加是否成功
(2)public E get ( int index)方法 - - - 从集合中获取元素 返回值为泛型的类型
(3)public E remove (int index)方法 - - - 从集合中删除元素 返回值类型为泛型
(4)public int size() 方法 - - - 获取集合长度
使用:
public class DemoArrayList { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("chris"); list.add("joe"); list.add("lin"); System.out.println(list); //获取集合的元素 String name = list.get(2); System.out.println(name); //删除集合的元素 String r1 = list.remove(1); System.out.println(r1); int size = list.size(); System.out.println(size); //遍历集合 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
如果希望向集合ArrayList里存储基本数据类型,必须使用数据类型对应的 ‘包装类’ - - - 包装类都位于java.Lang包下 所以不需要导包
包装类对应关系:除 int 对应 integer ; char 对应 character ;其他都是首字母大写
从jdk1.5开始支持自动装箱 拆箱 所以获取值时不需要用Integer来接收,会自动拆箱
往集合里添加整形类型:
ArrayList<Integer> i1 = new ArrayList<>(); i1.add(100); i1.add(134); System.out.println(i1); int num1 = i1.get(1);
练习1:创建6个随机数字加入集合,并遍历集合
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
ArrayList<Integer> list1 = new ArrayList<>(); Random ran1 = new Random(); for (int i2 = 0; i2 < 6; i2++) { int num = ran1.nextInt(33) + 1; list1.add(num); } for (int i3 = 0; i3 < list1.size(); i3++) { int listNum = list1.get(i3); System.out.println(listNum); }
练习2:创建一个有20个随机值的大集合,通过方法筛选出里面元素全是偶数的集合
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package basicpart.day01; import java.util.ArrayList; import java.util.Random; public class practise { public static void main(String[] args) { Random r1 = new Random(); ArrayList<Integer> array1 = new ArrayList<>(); for (int i = 0; i < 20; i++) { array1.add(r1.nextInt(100)); } System.out.println(array1); ArrayList<Integer> resule = checkArray(array1); System.out.println(resule); } public static ArrayList<Integer> checkArray(ArrayList<Integer> list){ ArrayList<Integer> array2 = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { int num = list.get(i); if(num % 2 == 0){ array2.add(num); } } return array2; } }