Day03.面向对象及其封装 、Api的使用、Scanner、Ramom类
1.1 面向对象思想概述
Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。
面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。
它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现.
特点: 面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。 面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
1.2类与对象
1、面向对象?
* 实际上是我们角色的转变 从一个执行者变成了一个指挥者
* 2、什么是类
* 类就想是一个模板,然后我们可以通过这个模板来做出来很多东西
* ,然后还可以在模板上加工自己的内容
* 3、什么是对象?
* 对象其实就是模板加工出来的产品,然后我们可以在上面做些自己的修改
举例
* 类不特指某一个对象 而是对象的抽象模板
* 对象是类具体的某一个实例
比如:小猫,小狗,属于两个类
而特指某一个猫或者狗就是对象,因此类便可以定义不同的对象。同时类也有多种。
类具有属性跟行为:
这里,猫有两只眼睛,四条腿,有它的颜色,都属于它的属性
行为程序中称为方法,他可以走路,喊叫。 狗可以看门咬人这些都属于行为。
类与对象的关系
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。
1.3类的定义
属性:事物的状态信息。
行为:事物能够做什么。 Java中用class描述事物也是如此:
成员变量:对应事物的属性 成员方法:对应事物的行为
public class ClassName{
//成员变量(全局变量)
//成员方法
}
注意:非默认的类的类名与文件名一致,使用驼峰命名法
默认的类名可以不一致,但不符合习惯,为以后调用和实例化制造了麻烦
1.4对象的使用
类名 对象名 =new 类名
对象名. 成员变量;
对象名. 成员方法();
对象使用举例

1.5成员变量和局部变量
* 1、位置不同
* 2、作用范围不一样
* 在方法中 局部变量和全局变量都有意义
* 说明局部变量只在方法里面起作用
* 3、 初始化值不一样;
* 局部变量必须有初始化值,不然会报错
* 全局变量本身就自带有初始值
a初始化值为0 其实八中基本变量的初始化值就是笔记里面的数字
* int byte short long 0
* String null
* float double 0.0
* 生命周期不一样
* 内存中位置不一样 方法执行完 就退出了栈 因此局部变量就失去了意义
* 我们的案例里面在方法后面调用不了局部变量,说明存储在栈中
成员变量:堆内存
局部变量:栈内存
1.6对象数组
数组的核心概念就是:某一数组之中的保存的都是对象,所以对于对象数组的种类分为
动态初始化:类名称 对象数组名称 [] =new 类名称 [长度];
静态初始化:类名称对象数组名称 [] =new 类名称[] {实例化对象,实例化对象}
2 封装
2.1 封装概述
概述
面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
2.2 封装的步骤
使用 private 关键字来修饰成员变量。
对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。
2.3 封装的操作——private关键字
private的含义
private是一个权限修饰符,代表最小权限。
可以修饰成员变量和成员方法。
被private修饰后的成员变量和成员方法,只在本类中才能访问。
private使用方法
private 数据类型 变量名;
1.使用private 修饰成员变量
2.提供set get方法

2.4 this关键字
Java中为解决变量的命名冲突和不确定性问题,引入关键字this代表其所在方法的当前对象的引用:
1) 构造方法中指该构造器所创建的新对象;
2) 方法中指调用该方法的对象;
3) 在类本身的方法或构造器中引用该类的实例变量(全局变量)和方法
this.成员变量
方法中只有一个变量名时,默认也是使用 this 修饰,可以省略不写。
2.5 封装优化2——构造方法 (构造器)
分为有参构造和无参构造
构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。使用 构造方法后,代码如下:
修饰符 构造方法名(参数列表){ // 方法体 }
注意事项
1. 如果你不提供构造方法,系统会给出无参数构造方法。
2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数
2.6 标准代码——JavaBean
JavaBean 是 Java语言编写类的一种标准规范。
符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无 参数的构造方法,提供用来操作成员变量的 setter 和 getter 方法。
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法【建议】
//成员方法
//getXxx(){return}
//setXxx(参数){}
```
```}

3. API的使用
打开帮助文档。
点击显示ctrl+f,找到索引,看到输入框。
你要找谁?在输入框里输入,然后回车。
看包。java.lang下的类不需要导包,其他需要。
看类的解释和说明。
学习构造方法
使用成员方法
4.Scanner类
4.1 Scanner类概念
一个可以解析基本类型和字符串的简单文本扫描器
例如:
public static void main(String [] args){
Scanner scan=new Scanner(System.in);
String str= scan.next();
}
4.2 引用类型使用步骤
导包
使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入。 格 式:import 包名.类名
创建对象
数据类型 变量名 = new 数据类型 (参数列表)
Scanner scan=new Scanner(System.in);
调用方法
变量.方法名();
String str=scan.next();//接受一个键盘录入的字符串
4.3 Scanner使用步骤
1.查看类(api文档里去查看):java.util.Scanner
2.查看构造方法:public Scanner(InputStream sourse)
3.查看成员方法 public int next()

求和
键盘录入两个数据并求和,代码如下:

取最值 键盘录入三个数据并获取大值,代码如下:

public class QiuZuizhi {
static int temp=0;
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
int a = scanner.nextInt();
int b=scanner.nextInt();
int c=scanner.nextInt();
// 方法一 temp=Math.max(Math.max(a,b),c);
//方法二 temp=((a>b?a:b)>c?(a>b?a:b):c);
System.out.println(temp);
}
}
4.5匿名对象
1.概念
创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用 场景非常有限。
匿名对象 :没有变量名的对象。格式:
new 类名(参数列表);
new Scanner(System.in);
应用场景
2.创建匿名对象直接调用方法,没有变量名
new Scanner(System.in).nextInt();
注:一个匿名对象,只能使用一次
3.匿名对象可以作为方法的参数和返回值

5 Random类
1.此类的实例用于生成伪随机数
利用同样的学习方法学Random
2.使用Random类,完成生成3个10以内的随机整数的操作,代码如下

注:创建一个 Random 对象,每次调用 nextInt() 方法,都会生成一个随机数。
5.3 练习
获取随机数
获取1-n之间的随机数,包含n

猜数字游戏

// 导包 import java.util.Random;
public class Test02Random {
public static void main(String[] args) {
// 系统产生一个随机数1‐100之间的。
Random r = new Random();
int number = r.nextInt(100) + 1;
while(true){
// 键盘录入我们要猜的数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要猜的数字(1‐100):");
int guessNumber = sc.nextInt();
// 比较这两个数据(用if语句)
if (guessNumber > number) {
System.out.println("你猜的数据" + guessNumber + "大了"); } else if (guessNumber < number) {
System.out.println("你猜的数据" + guessNumber + "小了");
} else {
System.out.println("恭喜你,猜中了");
break;
}
} } }

网友评论