Lecture:波哥
Java
是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java
虚拟机,Java
仍是企业和开发人员的首选开发平台。
现实世界是由什么组成的?
世界是由对象组成的
对象:是具体的事物
类:是对对象的抽象
对象:张三、李四、王五、赵六 抽取上述对象的相同的部分: 年龄、姓名、身高、体重、打牌、去隔壁老王家、唱歌、跳舞、打王者荣耀、吃鸡…
天使类:
具体的四个天使对象:
抽象u 他们的 共同 的特点
目前我们已经可以用计算机来表示八大基本数据类型,但是我们在开发的时候还要存储其他的数据,比如 一个人,一条狗,一张图片,一个视频等等,这种情况我们应该怎么实现?
我们学习编程语言的目的就是为了模拟现实世界的事物,实现信息化。其实呢在计算中使用Java语言模拟现实时间是很简单的,Java为我们提供了 类
,所有Java是通过 类
来描述世界的
现实生活中如何描述一个事物:
举个栗子描述:表示一条狗
我们学习Java语言的最基本单位是类,在Java中使用 类 来描述事物
类:类是抽象的,是一组相关的属性和行为的集合,可以看出一个模板
对象:对象是具体的,是客观存在的实例,是该类事物的具体体现
举例: 老婆 翠花 = new 老婆(); 类: 老婆 是一个类 对象: new 老婆(); 是一个对象, 取了一个名字叫 翠花 引用 叫 翠花相当于叫了老婆对象
对象的特征:
属性:对象具有的各个特征
每个对象的每个属性都拥有特定值
行为:对象执行的操作
对象:用来描述客观事物的一个实体,由一组属性和方法构成
列举出图片中的这辆跑车的属性和方法
列举出下图小狗的属性和行为
类是抽象的概念,仅仅是模板,比如说: 人
对象是一个你能够看得到。摸得着的具体的实体
类的理解:
Java中使用class类描述类
语法格式:
[访问权限修饰符] class 类名 {
成员变量;
成员方法;
}
定义一个类的步骤:
package com.bobo.oop;
/**
* [访问权限修饰符] class 类名 {
成员变量;
成员方法;
}
* @author dpb
*
*/
public class OOPDemo01 {
public static void main(String[] args) {
}
}
class Dog{
// --- 定义相关的属性
// 姓名
String name;
// 年龄
int age;
// 颜色
String color;
// --- 定义相关的行为 方法
public void eat(){
System.out.println("吃大骨头...");
}
public void jump(){
System.out.println("跳跃...");
}
}
对象的理解:
语法格式:
类名 对象名 = new 类名();
/**
* 程序的入口
*
* @param args
*/
public static void main(String[] args) {
// 创建一个Dog对象
Dog wangcai = new Dog();
System.out.println(wangcai);
}
对象创建出来了,如果调用相关的属性和方法呢?在Java中引用对象的成员:使用 ’ . ’ 进行操作
package com.bobo.oop;
/**
* [访问权限修饰符] class 类名 {
成员变量;
成员方法;
}
* @author dpb
*
*/
public class OOPDemo01 {
/**
* 程序的入口
*
* @param args
*/
public static void main(String[] args) {
// 创建一个Dog对象
Dog wangcai = new Dog();
System.out.println(wangcai);
System.out.println(wangcai.name);
System.out.println(wangcai.age);
System.out.println(wangcai.color);
wangcai.name = "wangcai";
wangcai.age = 3;
wangcai.color = "白色";
System.out.println(wangcai.name);
System.out.println(wangcai.age);
System.out.println(wangcai.color);
// 成员方法的调用
wangcai.eat();
wangcai.jump();
}
}
class Dog{
// --- 定义相关的属性
// 姓名
String name;
// 年龄
int age;
// 颜色
String color;
// --- 定义相关的行为 方法
public void eat(){
System.out.println("吃大骨头...");
}
public void jump(){
System.out.println("跳跃...");
}
}
1.编写一个学生类,输出学生相关的信息
package com.bobo.oop;
public class OOPDemo02 {
public static void main(String[] args) {
Student zs = new Student();
zs.printInfo();
}
}
// 定义一个学生类
class Student{
// 定义相关的属性 姓名 年龄 班级 爱好
String name;
int age;
String className;
String hobby;
// 定义相关的行为 打印学生信息
public void printInfo(){
System.out.println("name="+name+"\t age="+age
+ "\t className="+className+"\t hobby="+hobby);
}
}
2.编写一个教员类,输出相关的信息
package com.bobo.oop;
public class OOPDemo03 {
public static void main(String[] args) {
// 获取教员对象
Teacher zl = new Teacher();
zl.teacherName = "张三丰";
zl.major = "数学";
zl.printInfo();
}
}
class Teacher{
String teacherName; // 姓名
String major; // 专业
String course; // 课程
String teachingAge; // 教龄
public void printInfo(){
System.out.println("teacherName:" + teacherName
+ "\t major:" + major
+ "\t course:" + course
+ "\t teachingAge:" + teachingAge);
}
}
3.定义一个管理员类
package com.bobo.oop;
/**
* 管理员类
* 属性:
* 账号
* 密码
* 行为:
* 登录
* 注销
* @author dpb
*
*/
public class Administrator {
// 账号
String userName;
// 密码
String password;
/**
* 判断账号密码是否正确
* @return
*/
public boolean login(){
System.out.println("账号登录...");
if("zhangsan".equals(userName) && "123".equals(password)){
return true;
}
return false;
}
public void logout(){
System.out.println("退出登录...");
}
}
package com.bobo.oop;
public class TestAdministrator {
/**
* 创建两个管理员类的对象,并输出他们的信息
* @param args
*/
public static void main(String[] args) {
Administrator admin = new Administrator();
admin.userName = "zhangsan";
admin.password = "123";
System.out.println(admin.userName + "\t" + admin.password);
Administrator root = new Administrator();
root.userName = "lisi";
root.password = "111";
System.out.println(root.userName + "\t" + root.password);
}
}
变量分为局部变量和成员变量,这两种类型的变量也是容易让大家混淆的地方,所以我们在此处详细介绍他们的区别:
成员变量:定义在类体以内,方法体以外
局部变量:定义在方法体内或者声明在方法上(形参)
成员变量:在堆内存中存储
局部变量:在栈区中存储
成员变量:有默认值
局部变量:没有默认值,所有局部变量在使用之前必须赋值
生命周期:一个变量从创建到销毁的全过程
成员变量:随着对象的创建而创建,随着对象的销毁而销毁,具体的结束时间是在垃圾回收器空闲的时候销毁
局部变量: 随着方法的调用而创建,随着方法的执行结束而销毁
当局部变量和成员变量重名的时候,局部变量优先于成员变量(就近原则)
package com.bobo.oop02;
public class OOPDemo01 {
/**
* 局部变量和成员变量
* @param args
*/
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.dogName);
System.out.println(dog.dogAge);
System.out.println(dog.dogColor);
int x;
int y;
dog.dogName = "旺财";
System.out.println(dog.dogName);
dog.eat();
}
}
// String dogHobby; 成员变量不能定义到 类体之外
// 定义一个Dog Java类
class Dog{
// 成员变量
public String dogName;
public int dogAge;
public String dogColor;
// 定义一个方法
public void eat(){
System.out.println("--->"+dogName); // 成员变量
String dogName = "小黑";
System.out.println(dogName); // 局部变量
// 。。。
return ;
}
public void jump(){
//System.out.println(a);
}
}
基本数据类型作为形式参数,形参的改变不会影响实际参数,传递的是值本身
package com.bobo.oop02;
public class OOPDemo02 {
public static void main(String[] args) {
Demo d = new Demo();
int x = 10;
System.out.println("方法调用之前x的值为:" + x); // 10
d.change(x);// 调用Demo对象的方法
System.out.println("方法调用之后x的值为:" + x); // 10
}
}
class Demo{
public void change(int a){
a += 5; // 局部变量
System.out.println("方法中的a值:" + a); // 15
}
}
输出的打印结果
方法调用之前x的值为:10
方法中的x值:15
方法调用之后x的值为:10
引用数据类型作为参数,形参的改变影响实际参数,传递的是地址值
package com.bobo.oop02;
public class OOPDemo03 {
public static void main(String[] args) {
Student t = new Student();
t.name = "张三";
t.age = 22;
System.out.println("方法调用之前学生的信息:" + t.name + "\t" + t.age);
Demo02 d = new Demo02();
// 调用了方法
d.change(t);
System.out.println("方法调用之后学生的信息:" + t.name + "\t" + t.age);
}
}
class Demo02{
public void change(Student s){
s.name = "小明";
s.age = 18;
System.out.println("方法调用时学生的信息:" + s.name + "\t" + s.age);
}
}
class Student{
String name;
int age;
}
输出结果:
方法调用之前学生的信息:张三 22
方法调用时学生的信息:小明 18
方法调用之后学生的信息:小明 18
没有名次的对象我们称为匿名对象
new Dog();
new Demo02().change(new Student());
匿名对象的特点:对象只会被使用一次,作为调用者来说,之后就获取不到这个对象了
如果对象只需要使用一次的话,那么我们就可以使用匿名对象
匿名对象一旦使用完成就会自动释放,节约内存资源
作为实际参数传递的时候会比较方便。