1、面向对象开发
两种编程思想:
面向过程:
程序自上而下执行,不牵涉到类和对象的操作。本质是代码自己完成自己的功能
冒泡排序是面向过程的
亲历亲为都是面向过程的
面向对象:
程序是靠对象完成一定的功能
Arrays.sort(arr) 是面向对象的
借助于对象来实现功能的
2、面向对象的两个重要概念
类:是一切相似事物的统称。是一个范范的概念。可以用来描述事物的特征和行为
对象:对象是一个具体的实体。在类的基础上孵化出来的
3、声明一个类
语法格式:
public class 类名{ 对于当前类属性的描述; 对于当前类方法的描述; }
public class Student{ /** * 属性:name、id 、sex * * 方法:eat()、sleep() */ String name; int id; char sex; public void eat(){ System.out.println("我喜欢吃西红柿炒鸡蛋"); } public void sleep(){ System.out.println("中午不睡,下午崩溃。"); } }
4、对象的创建
一个类声明好以后,不使用它,它一直存在,可以借助对象来调用类的属性和方法
语法格式:
类名 对象名 = new 类名();
public static void main(String[] args){ //创建一个student对象 Student student = new Student(); //用student对象调用Student类中的属性并赋值 student.name = "小余"; student.id = 2212004; student.sex = '男'; System.out.println( student.name + student.id + student.sex); //用student对象调用Student类中的方法 student.eat(); student.sleep(); }
5、创建的实体类和测试类在同一个Java文件中
实体类和测试类写在同一个文件中的时候,实体类不能带public修饰符
public class Demo1 { public static void main(String[] args){ //创建一个student对象 Student student = new Student(); //用student对象调用Student类中的属性并赋值 student.name = "小余"; student.id = 2212004; student.sex = '男'; System.out.println( student.name + student.id + student.sex); //用student对象调用Student类中的方法 student.eat(); student.sleep(); } } class Student{ /** * 属性:name、id 、sex * * 方法:eat()、sleep() */ String name; int id; char sex; public void eat(){ System.out.println("我喜欢吃西红柿炒鸡蛋"); } public void sleep(){ System.out.println("中午不睡,下午崩溃。"); } }
6、构造方法
构造方法的目的是为了初始化对象的,换句话说, 可以队对象的属性进行赋值
对象创建其实是依据构造方法创建的!!!【重点】
eclipse 创建构造方法的快捷键:alt+shift+s
6.1 无参构造方法
构造方法必须写在实体类中
语法格式:
public 类名(){ }
6.2 有参构造方法
语法格式:
public 类名 (参数){ 初始化条件; }
public class Demo3 {
public static void main(String[] args) {
//无参构造方法
Sheep sheep = new Sheep();
sheep.id = 1;
sheep.name = "喜羊羊";
System.out.print(sheep.name + "唱歌:");
sheep.sing();
//有参构造方法调用
Sheep sheep1 = new Sheep("懒洋洋", 2, '公');
System.out.print(sheep1.name + sheep1.id + sheep1.sex);
}
}
class Sheep {
String name;
int id;
char sex;
//无参构造方法
public Sheep(){}
//有参构造方法
public Sheep(String name, int id, char sex){
this.name = name;
this.id = id;
this.sex = sex;
}
public void sing() {
System.out.println("别看我只是一只羊....");
}
}
7、对象在内存中如何存储
栈内存:
存的是八大基本数据类型的数据
对象的引用。 =左边
栈内存:
对象的全部数据 =右边
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZdm4lv0-1659413715407)(D:\LearnNotes\千峰Java学习\我的笔记\image\1.png)]
8、构造代码块【了解】
开发中已经不用了
以后会讲静态代码块。
构造代码块的目的也可以对咱们的对象进行初始化的。功能和构造方法一样的
语法格式:
{ 语句体 }
注意事项:
1.构造代码块必须写在实体类中
2.先执行的是构造代码块,再执行构造方法
package com.qfedu.b_constructor;
class Tiger {
String name;
int age;
//再声明一个构造方法
public Tiger () {
this.name = "haha";
System.out.println("我是无参构造方法");
}
//先写一个构造代码块
{
this.name = "嘻嘻";
System.out.println("我是构造代码块");
}
}
public class Demo5 {
public static void main(String[] args) {
//先执行实体类中构造代码块 然后再执行构造方法
Tiger tiger = new Tiger();
System.out.println(tiger.name);
}
}
9、局部变量和成员变量
9.1局部变量
局部变量就是变量的作用域
package com.qfedu.c_var;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Demo1 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
//上面的i就是for循环的局部变量,出了for循环还能用吗?不能
//紧紧围绕着一个东西就是那个大括号
System.out.println(i);
}
//System.out.println(i);
if (3 < 4) {
int i = 98;
}
}
public static void test () {
int i = 20;
System.out.println(i);
}
public static void test1 () {
//System.out.println(i);
}
//总结一下: 一定要看清大括号里面的那个变量只能在大括号里面来使用的
}
9.2成员变量
定义在实体类的大括号的后面,又叫属性
String name;
int age;
package com.qfedu.c_var; class Person { //name 和 age都是成员变量 String name; int age; //作用域 是作用再整个类中 的,只要在类中都可以使用当前的成员变量 public void eat () { double weigt;//局部的变量 System.out.println(name + age); } } public class Demo2 { public static void main(String[] args) { } }
9.3局部变量和成员变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
定义的位置 | 类的大括号后面(属性) | 定义在方法中 |
作用 | 用来描述对象的特征 | 在方法体中只是用来存储数据 |
初始化的值 | 默认值 | 在使用时必须要赋初值 |
内存 | 堆区 | 栈区 |
作用域 | 作用整个类 | 只能在当前的方法中使用 |
| ---------- | ---------------------- | -------------------------- |
| 定义的位置 | 类的大括号后面(属性) | 定义在方法中 |
| 作用 | 用来描述对象的特征 | 在方法体中只是用来存储数据 |
| 初始化的值 | 默认值 | 在使用时必须要赋初值 |
| 内存 | 堆区 | 栈区 |
| 作用域 | 作用整个类 | 只能在当前的方法中使用 |