java学习第六天
两种编程思想
面向过程的编程
例如:c语言,代码写在文件中,没有类的概念,程序的组成靠函数。
编程思路按业务逻辑顺序的写代码。依次调用函数来实现功能。
重点关注业务的过程和步骤
面向对象编程
Object Oriented Programming(OOP),面向对象编程。
面向对象编程语言中都有类的概念,代码的组织靠类(代码的最小组织单位是类)面向对象编程中执行一个功能的代码叫方法(method)。
编程的思路调用不同功能的类的方法来实现业务功能。
重点关注业务需要由哪些功能的类来组成。
举例:比较两种思想的不同之处。
打扫教师的卫生:
*面向过程:*思考打扫教室的卫生的步骤,椅子放到桌子上—> 扫地上垃圾—> 拖地 —> 椅子放下来—> 擦窗户—> 擦玻璃
安排任务:谁做什么
*面向对象:*思考打扫教室卫生有哪些任务:地面、桌椅、门窗
安排:谁适合做对应的任务。地面的劳动强度较大,就派强壮的同学去做;擦桌子需要细心,派女同学去做;门窗比较高,派高个子同学去做。
找的人具备业务能力,不需要教他,安排下去就不用管了。
总结
- 面向过程:亲力亲为,侧重于分析和处理
- 面向对象:所有的事情交给相应的对象(具备能力)去完成,侧重于分析完成任务需要哪些(什么样)对象。
类和对象
类(class)
具有相同属性和行为的对象的集合,它是一个抽象的概念,不指向任何具体的实物。
**属性:**描述对象的特征,在程序中,体现成员变量。
**行为:**对象具有的动作或能力,在程序中,体现在方法。
例如:下列这些都是类
猫、 学生 、 桌子 、 树 …
类的定义
程序中用关键字class来定义一个类。
语法结构:[修饰符] class 类名{
//属性(成员变量)
// 行为(方法)
}
public class Car {
//定义属性(成员变量)
String byd;//汽车的品牌
String color;//汽车的颜色
int seat;//座位数
int price;//价格
//定义方法(行为)
static void go(){
System.out.println("比亚迪在跑");
}
static void stop(){
System.out.println("比亚迪停了");
}
static void fiy(){
System.out.println("比亚迪飞了");
}
对象(object)
对象是类的一个具体的实例,是类的具体表现。
创建对象的语法:
类名 对象名 = new 类名(参数);(参数可以没有)
-
读写属性
对象名.属性名
-
调用方法
对象名.方法名(参数); (参数可以没有)
//创建一个Car类的对象(实例化)
Car car = new Car();
//设置对象的属性
car.brand = "长安";
car.color = "黑色";
car.seat = 5;
car.price = 156000;
System.out.println(car.brand+car.price+ car.color+car.seat);
//执行对象的行为(调用对象的方法)
Car.go();
Car.stop();
Car.fly();
}
类和对象的关系
类是对象的集合,是抽象概念;对象是类的具体实例。
通过new 关键字创建(实例化)对象
成员变量和局部变量的区别
成员变量
定义在类中的变量,称为成员变量(属性)。
与数组元素一样,有默认值,所以成员变量可以不初始化直接使用。
作用域是整个类。
对象被垃圾回收时,成员变量就消失。
//定义属性(成员变量)
String brand;//汽车的品牌
String color;//汽车的颜色
int seat;//座位数
int price;//价格
成员变量的默认值(与数组元素的默认值相同)
数据类型 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0.0 |
布尔型 Boolean | false |
字符型 | 不可见字符(‘\u0000’) |
引用类型 | null |
局部变量
定义在方法中的变量,称为局部变量。
局部变量没有默认值,所以必须要先初始化,再使用。
局部变量的作用域在它所在的大括号{}内有效。
方法执行完成后,局部变量就消失。
public static void main(String[] args) {
int i = 1;
String j = "张三";
练习:
1、创建一个学生类Student
属性:姓名、年龄、性别
行为:学习、考试、休息
String name;
String six;
int age;
static void stud(){
System.out.println("正在学习。。。");
}
static void exam(){
System.out.println("正在考试中。。。");
}
static void rest(){
System.out.println("正在休息。。。");
}
2、猜数游戏
随机产生一个数字(1-100),控制台输入一个数字,判断是否猜中,猜中就结束。如果比随机数大就提示(猜的数字比随机数大),反之。
import java.util.Random;
import java.util.Scanner;
public class Game {
//创建一个获取随机数的方法,返回类型为int
static int ranNum() {
Random random = new Random();
//返回获取的随机数。随机数的范围:(0-99)+1 => (1-100)
return random.nextInt(100) + 1;
}
//创建一个用户输入整数的方法,类型与随机数保持一致
static int user() {
Scanner scanner = new Scanner(System.in);
//返回用户输入的数
return scanner.nextInt();
}
//创建一个判断方法,接收并判断随机数与用户输入的数。
static void judge(){
//调用生成随机数的方法,永一个变量
int j = Game.ranNum();
//调用用户输入整数的方法
System.out.println("请输入一个0-100的整数");
int k = Game.user();
while (j != k) {
if (j > k) System.out.println("猜小了,请继续猜");
else System.out.println("猜大了,请继续猜");
//继续输入
k = Game.user();
}
System.out.println("恭喜你,猜对了!这个数是:" + j);
}
//主函数调用方法
public static void main(String[] args) {
Game.judge();
}
}
构造方法
构造方法是类里面一个特殊的方法:
- 方法名与类名相同
- 无返回值(没有返回类型,即使是void)
- 可以有参数,也可以没有参数。
- 如果一个类,没有写构造方法,默认提供一个无参数的构造方法
- 一个类可以有多个构造方法。每个构造方法的参数个数可以不一样。
- 一旦一个类写了构造方法,默认的无参构造方法不在生效。
- 构造方法不能通过对象直接调用,在创建对象(实例化)的时候自动调用。
默认无参构造方法如下:
public class Car {
//定义属性(成员变量)
String brand;//汽车的品牌
String color;//汽车的颜色
int seat;//座位数
int price;//价格
public Car() {
}
//无参数构造方法去new对象
Car car = new Car();
有参构造方法
public Car(String brand, String color, int seat, int price) {
//this代表当前对象
this.brand = brand;
this.color = color;
this.seat = seat;
this.price = price;
}
//有参数的构造方法去new对象
Car car1 = new Car("奔驰","白色",5,19000);
-
IDEA中创建构造方法
代码空白的地方,单机右键=> generate
=> constructor
=>
POJO
POJO(plan Ordinary java Object)简单类java类,也叫java Bean。
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
package和import
package
java中的包,用于区分同名的类,相当于Windows系统中的目录(文件夹)
为了避免package相同,一般用公司的域名作为package,例如:华清远见的域名是hqyj.com。包名就写为com.hqyj
package放到类文件的第一行,语法:package xxx.xxx
package都是用小写,中间永点号分割,每个点号分隔开的一段,磁盘上就会生成对应的文件夹。
import
在使用一个别的包下面的类的时候,需要用import关键字导入包
import语句写在package之后,在class定义之前
import语句一次可以导入一个类,或者用通配符 * 导入多个类
//导入java.util包下的Scanner类
import java.util.Scanner;
//批量导入java.util包下的所有类
import java.util.*;
在IDEA中,如果new对象时用了代码补全功能,他会自动帮我们导入包。有同名的类时,要让我们选择导入哪个包下的类
如果使用java.lang这个包下的类,不需要导入,直接可以使用。