java面向对象(详细讲解)
第一章 类和对象
1.面向对象的介绍
1.面向过程:自己的事情自己做,代表语言c语言
2.面向对象:自己的事情别人做,代表语言java
3.为啥要使用面向对象思想编程:很多功能别人给我们实现好了,我们只需要拿过来用即可,减少了我们的代码量
4.什么时候使用面向对象思想编程:
调用别人的功能时
在一个类中想使用别的类中的成员时,就使用面向对象思想编程
至于我们使用的功能人家怎么实现的,我们不需要关心,只需要知道怎么使用即可
5.怎么使用面向对象思想编程:
new,new完点呀 ->点代表的是调用
特殊:如果调用的成员带static关键字,我们不需要new ,直接类名点即可
public class Demo01Object {
public static void main(String[] args) {
/*
我们想在Demo01Object类中使用Scanner类中的next()方法实现键盘录入字符串
那么我们就需要使用面向对象思想编程
对象:Scanner -> new出来的
对象实现好的功能:next()
我们只需要知道找来Scanner对象,就可以调用这个对象中实现好的next()方法
至于next()方法怎么实现的,我们不需要关心
* */
Scanner sc = new Scanner(System.in);
String data1 = sc.next();
System.out.println("data = " + data1);
System.out.println("=====================================");
/*
我们想在Demo01Object类中使用Random类中的nextInt()方法实现随机整数
那么我们就需要使用面向对象思想编程
对象:Random -> new出来的
对象实现好的功能:nextInt()
我们只需要知道找来Random对象,就可以调用这个对象中实现好的nextInt()方法
至于nextInt()方法怎么实现的,我们不需要关心
* */
Random rd = new Random();
int data2 = rd.nextInt();
System.out.println(data2);
System.out.println("=======================================");
int[] arr = {1,2,3,4};
// System.out.print("[");
// for (int i=0; i<arr.length;i++){
// if (i<arr.length-1){
// System.out.print(arr[i]+",");
// }else{
// System.out.print(arr[i]+"]");
// }
// }
/*
Arrays就是我们找来的对象
toString就是此对象中实现好的功能
我们只需要调用,怎么实现我们并不关心
* */
System.out.println(Arrays.toString(arr));
}
}
2.类和对象
2.1类(实体类)——class
1.测试类:带main方法的类,主要是运行代码的
2.实体类:是一类事物的抽象表示形式
世间万物的分类:比如,人类 狗类 猫类 鼠标类
组成部分:
1.属性(成员变量):这一类事物有啥
a.定义位置:类中方法外
b.作用范围:作用于当前类
c.定义格式:数据类型 变量名
d.默认值:
整数:0
小数:0.0
字符:‘\u0000’
布尔:false
引用:null
2.行为(成员方法):这一类事物都能干啥
只需要将模块六所学的方法 中的static干掉,其他的都一样
描述人类:
public class person {
//属性 ->成员变量
String name;
int age;
//行为 ->成员方法
public void eat(){
System.out.println("人要吃饭");
}
public void drink(){
System.out.println("人要喝水");
}
}
描述动物类:
public class Animal {
String kind;//品种
String color;//颜色
public void eat(){
System.out.println("动物也要吃饭");
}
public void sleep(){
System.out.println("动物也要睡觉");
}
}
描述手机类:
public class Phone {
String kind;//型号
String brand;//品牌
String color;//颜色
int price;//价格
public void call(String name){
System.out.println("给name打电话");
}
public String message(){
return "给鹭卓发短信";
}
}
2.2对象
1.概述:一类事物的具体体现
2.使用:
a.导包:import 包名.类名
如果两个类在同一个包下,则不需要导包
如果两个类不在同一个包下,想要使用对方的成员则需要导包
特殊包:java.lang ->使用lang包下的类不需要导包,比如字符串
友情提示:在学四种权限修饰符之前,尽量让两个类在同一个包下
b.创建对象:想要使用哪个类中的成员,就new哪个类的对象
类名 对象名 = new 类名() ->比如:Person person = new Person();
c.调用成员(成员变量,成员方法): ->想要使用哪个类中的成员,就用哪个类的对象去点哪个成员
对象名.成员变量名 =值;
对象名.方法名() ->调用的是无参无返回值方法
对象名.方法名(实参) ->调用的是有参无返回值方法
数据类型 变量名 = 对象名.方法名() ->调用的是无参有返回值方法
数据类型 变量名 = 对象名.方法名(实参) ->调用的是有参有返回值方法
public class Person {
//属性 ->成员变量
String name;
int age;
//行为 ->成员方法
public void eat(){
System.out.println("人要吃饭");
}
public void drink(){
System.out.println("人要喝水");
}
}
public class Demo01Person {
public static void main(String[] args) {
Person person = new Person();
person.name = "路卓豪";
person.age = 29;
System.out.println(person.name+" "+person.age);
person.eat();
person.drink();
}
}
2.3练习
需求:用代码去描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能
手机类:
public class Phone {
String kind;//型号
String brand;//品牌
String color;//颜色
int price;//价格
public void call(String name){
System.out.println("给"+name+"打电话");
}
public String message(){
return "给鹭卓发短信";
}
}
测试类:
public class Demo02Phone {
public static void main(String[] args) {
/*
用代码去描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能
* */
Phone pc = new Phone();
//给属性赋值
pc.brand = "小米";
pc.color = "橙色";
pc.price = 2999;
System.out.println(pc.brand);
System.out.println(pc.color);
System.out.println(pc.price);
//调用其功能
pc.call("十个勤天");
String mess = pc.message();
System.out.println("message = " + mess);
}
}
3.匿名对象的使用
1.int i =10;
int:指的是数据类型
i:指的是变量名
等号右边的10是真正的数据
2.Person p = new Person();
等号左边的Person是对象类型
p:对象名
等号右边的new Person():真正的数据,一个Person对象,将这个对象真正创建出来了
1.所谓的匿名对象:其实就是没有等号左边的部分,只有等号右边的部分(对象)
2.使用:
new 对象().成员
3.注意:
如果我们只想单纯的调用一个方法,让方法执行,我们可以考虑使用匿名对象
但是如果涉及到赋值,千万不要使用匿名对象
public class Person {
String name;
public void eat(){
System.out.println("人要吃饭");
}
}
public class Demo01Person {
public static void main(String[] args) {
//原始方式
Person p = new Person();
p.name = "十个勤天";
System.out.println(p.name);
p.eat();
System.out.println("=============================");
//匿名对象
new Person().eat();
new Person().name = "做大做强";
System.out.println(new Person().name);//null
}
}
第二章 成员变量和局部变量的区别
1.定义位置不同(重点)
1.成员变量:类中方法外
2.局部变量:定义在方法之中或者参数位置
2.初始化值不同(重点)
1.成员变量有默认值,所以不用手动赋值就可以直接使用
2.局部变量没有默认值,所以需要先手动赋值再使用
3.作用范围不同(重点)
1.成员变量作用于整个类
2.局部变量只作用于自己所在的方法,其他方法使不了
4.内存位置不同(了解)
1.成员变量在堆中,跟着对象走
2.局部变量在栈中,跟着方法走
5.生命周期不同(了解)
1.成员变量随着对象的创建而产生,随着对象的消失而消失
2.局部变量随着方法的调用而产生,随着方法的调用完毕而消失
public class Person {
String name;//成员变量
public void eat(){
int i =10;//局部变量
System.out.println(i);
System.out.println(name);//成员变量不用手动赋值可以直接使用
}
public void drink(){
int j;
//System.out.println(j);//局部变量需要手动赋值再使用
System.out.println(name);//成员变量作用于整个类
System.out.println(i);//i是aet()方法的局部变量,在drink()中无法使用
}
}
第三章 练习
需求:定义一个类MyData,属性有 year month day
在定义一个类Citizen(公民类),属性有 name(String类型) birthday(MyData 类型) idCard(String类型) 为这三个属性赋值,然后将值取出来
public class MyData {
/*
定义一个类MyData,属性有year month day
在定义一个类Citizen(公民类),属性有name(String类型) birthday(MyData 类型) idCard(String类型) 为这三个属性赋值,然后将值取出来
* */
int year;
int month;
int day;
}
public class Citizen {
String name;
MyData birthday;
// MyData birthday = new MyData();
String idCard;
}
public class Test {
public static void main(String[] args) {
MyData myData = new MyData();
myData.year = 2025;
myData.month = 3;
myData.day = 22;
Citizen citizen = new Citizen();
citizen.name = "十个勤天";//默认值null
/*
生日 MyData类型
MyData属于自定义类型(引用数据类型)
这种类型要操作之前必须要赋值
怎么赋值:需要new对象赋值
* */
citizen.birthday = new MyData();//默认值null
citizen.idCard = "后陡门58号";//默认值null
/*
citizen.birthday获取的是MyData对象
再去点year获取的是MyData对象中的year
链式调用
* */
citizen.birthday.year = 2000;
citizen.birthday.month = 2;
citizen.birthday.day = 17;
System.out.println(citizen.name+","+citizen.birthday.year+","+citizen.idCard);
}
}
给自定义(引用)的类型赋值,需要new对象,String比较特殊可以直接使用