面对对象思想:Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现。
类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
public class ClassName { //成员变量 //成员方法 }
对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性 和行为。
类名 对象名 = new 类名();
类和对象的关系:
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。
封装
面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
private关键字的含义
1. private是一个权限修饰符,代表最小权限。
2. 可以修饰成员变量和成员方法。
3. 被private修饰后的成员变量和成员方法,只在本类中才能访问。
提供 get* 方法 / set*方法,可以访问成员变量,生成toString方法方便输出打印
package main.java.com.riverside; public class Demo01 { private String name; private int age; public Demo01() { } public Demo01(String name, int age) { this.name = name; this.age = age; } 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; } @Override public String toString() { return "Demo01{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
this关键字
上面代码如果把this关键字去掉,也就是set*和get*方法的形参和变量名一样,在修改了 set*() 的形参变量名后,方 法并没有给成员变量赋值!这是由于形参变量名与成员变量名重名,导致成员变量名被隐藏,方法中的变量名,无 法访问到成员变量,从而赋值失败。get*同理,所以,我们只能使用this关键字,来解决这个重名问题。
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
构造方法:当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。
有有参构造和无参构造方法;注意:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效
public Demo01() { } public Demo01(String name, int age) { this.name = name; this.age = age; }
标准JavaBean:上面写的就是标准JavaBean,下面我们来运行一下
package main.java.com.riverside; public class Demo02 { public static void main(String[] args) { Demo01 demo01 = new Demo01(); demo01.setName("赵丽颖"); demo01.setAge(28); System.out.println(demo01.getName()+"的年龄为"+demo01.getAge()+"岁"); } }
结果:
处理java.lang包下的不需要导包,其他均需要导包
1.Scanner类:一个可以解析基本类型和字符串的简单文本扫描器。在java.util包下
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
System.in表示从键盘输入数据,使用Scanner类需要导包,导包使用import,例如import java.util.Scanner
构造方法:public Scanner(InputStream source) : 构造一个新的 Scanner ,它生成的值是从指定的输入流扫描的。
成员方法:public Scanner(InputStream source) : 构造一个新的 Scanner ,它生成的值是从指定的输入流扫描的。
案例:结合前面的Demo1,使用Scanner对象从键盘输入传递姓名年龄,并使用toString输出打印
package main.java.com.riverside; import java.util.Scanner; public class Demo03 { public static void main(String[] args) { Scanner sc = new Scanner(System.in);//创建Scanner对象 Demo01 demo01 = new Demo01();//new一个Demo01的javaBean对象 System.out.println("请输入您的姓名:"); String name= sc.next(); demo01.setName(name);//将键盘输入的数据传给setName方法 System.out.println("请输入您的年龄:"); int age = sc.nextInt(); demo01.setAge(age); System.out.println(demo01.toString()); } }
这个类的一个实例是用于生成伪随机数流
构造方法:Random() 创建一个新的随机数发生器
成员方法:public int nextInt(int n) :返回一个伪随机数,范围在 0 (包括)和 指定值 n (不包括)之间的 int 值。
案例:使用Random完成一个1-100猜数字大小的游戏
package main.java.com.riverside; import java.util.Random; import java.util.Scanner; public class Demo04 { public static void main(String[] args) { Random random = new Random(); int count = random.nextInt(100) + 1; while (true) { Scanner sc = new Scanner(System.in); System.out.println("请输入您所猜的数字:"); int i = sc.nextInt(); if (i > count) { System.out.println("猜大了请再猜猜"); } else if (i < count) { System.out.println("猜小了请再猜猜"); } else { System.out.println("恭喜您猜对了"); break;//跳出循环 } } } }
java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储 的元素。 ArrayList 中可不断添加元素,其大小也自动增长。
成员方法:public boolean add(E e) : 将指定的元素添加到此集合的尾部。 参数 E e ,在构造ArrayList对象时, <E> 指定了什么数据类型,那么 add(E e) 方法中,只能添加什么数据 类型的对象。
对于元素的操作,基本体现在——增、删、查。
常用的方法有: public boolean add(E e) :将指定的元素添加到此集合的尾部。
public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素。 public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
package main.java.com.riverside; import java.util.ArrayList; public class Demo05 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("张三"); list.add("李四"); list.add("王五"); System.out.println("get="+list.get(0));// public E get(int index)返回指定索引位置的元素 System.out.println("get="+list.get(1)); System.out.println("get="+list.get(2)); System.out.println("----------------"); System.out.println("size="+list.size());//返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界 System.out.println("----------------"); System.out.println("remove="+list.remove(0));//删除指定索引的元素,返回被删除的元素 for (int i = 0; i <list.size() ; i++) { System.out.println(list.get(i));//遍历输出 } } }
如何存储基本数据类型
ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似 <int> 不能写,但是存储基本数据类型对应的 包装类型是可以的。所以,想要存储基本类型数据, <> 中的数据类型,必须转换后才能编写
练习:把产生的随机偶数并添加到一个集合中
package main.java.com.riverside; import java.util.ArrayList; import java.util.Random; public class Demo06 { public static void main(String[] args) { Random random = new Random();// 创建Random 对象 ArrayList<Integer> list = new ArrayList<>(); // 创建ArrayList 对象 for (int i = 0; i < 20; i++) { // 添加随机数到集合 int r = random.nextInt(1000) + 1; list.add(r); } ArrayList<Integer> arrayList = getArrayList(list);// 调用偶数集合的方法 System.out.println(arrayList); } public static ArrayList<Integer> getArrayList(ArrayList<Integer> list) { ArrayList<Integer> smallList = new ArrayList<>(); // 创建小集合,来保存偶数 for (int i = 0; i < list.size(); i++) {// 遍历list Integer num = list.get(i);// 获取元素 if (num % 2 == 0) { // 判断为偶数,添加到小集合中 smallList.add(num); } } return smallList; // 返回小集合 } }