- 以分类的方式进行思考和解决问题。
-
面向对象先对整体关系作出分类,然后根据不同的类深入细节处理。
类是什么? 类是一个抽象概念,是一个模板。
例如 冰箱类:型号,大小,开门,关门
面向对象的操作步骤-
首先 设计类。
2.最终在使用的时候,是根据类实例化出具体的对象,去使用具体的对象来完成功能。
面向对象与面向过程相辅相成。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,任然采用面向过程的思维方式。
java类的定义面向对象的程序设计 第一步:发现类
类的声明格式为:
访问权限修饰符 修饰符 class 类名{
}
例如
public class 类名{
}
访问权限修饰符有两种 public ,无(默认)
修饰符:final abstract
关键字 class 用来定义一个类
java类名的命名规范: 类名首字母大写,见名知意,驼峰表示
第二步:发现类的共有属性(成员变量)
第三步:发现类的行为(成员方法)
public class Car{
//第二步:发现类的共有属性(成员变量) 名词
String name; //初始化值默认为null
String color;
int price; //初始化值默认为0
//第三步:发现行为(成员方法) 动词
public void run(){
System.out.println(name+"汽车行驶");
return 返回值;
}
public void stop(){
System.out.println(name+"汽车停止");
}
}
成员变量是定义在类中,方法体之外的变量。
在定义成员变量时可以对其初始化,如果不对其初始化,java使用默认的值对其初始化。
对象的创建和使用public class CarCreat {
public static void main(String[] args) {
Car bm5=new Car();
bm5.name="宝马5";
bm5.price=600000;
bm5.color="红色";
bm5.run();
bm5.stop();
Car bc=new Car();
bc.name="奔驰";
bc.price=700000;
bc.color="青色";
bc.run();
bc.stop();
Scanner sc = new Scanner(System.in);
sc.nextInt();
}
}
变量分类
基本类型:byte short int long ...
引用类型:String 数组 ....
按照位置分类
- 成员变量:
成员变量是定义在类中,方法体之外的变量。
成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
在定义成 员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
成员变量 在创建对象的时候会从类中复制一份到对象中。
- 局部变量:
在方法、构造方法或者语句块中定义的变量被称为局部变量。
局部变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
局部变量 在使用前必须初始化赋值。
变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁
方法分类-
成员方法:成员方法是定义在类中,主要是完成某种行为
语法格式:
修饰符 返回值类型 方法名( 参数列表){
方法体语句;
[return 返回值]
}
-
构造方法:用来初始化对象的方法。
类中有一个默认的无参的构造方法,可以为属性赋予默认值。
Car bm=new Car(); //Car() 就是类中的构造方法
特点:(1)方法名与类名相同,没有返回值且不需要void修饰。
(2) 一个类中可以有多个构造方法。
(3)类中一旦定义了有参的构造方法,默认无参的构造方法就会失效,
如果需要使用,需要显示的定义
public Car(){
System.out.println("Car类无参的构造方法")
}
方法重载:把一个类中有多个方法名相同的现象称为方法重载
如何区分方法:通过参数的个数,类型,顺序区分
方法的重载与返回值无关
package day1;
public class Che {
String name;
int price;
String color;
public Che(){
System.out.println("Che类无参的构造方法");
}
//Che类有参的构造方法
//this表示当前正在使用的对象
public Che(String name,int price,String color){
System.out.println("有3个参数的构造方法");
this.name=name;//右边的name是传入进来的参数name,左边的name是上面定义的类中的name。把右边传入进来的参数name赋给左边的name
this.price=price;
this.color=color;
}
public Che(String name,int price){
System.out.println("有2个参数的构造方法");
this.name=name;
this.price=price;
this.color=color;
}
public void run()
{
int a=0;
System.out.println(this.name+"跑挺快"+a);
}
public void run(int speed)
{
System.out.println(this.name+"以"+speed+"的速度跑挺快");
}
}
package day1;
public class TestChe {
public static void main(String[] args) {
Che bmx5=new Che();
bmx5.name="宝马x5";
bmx5.run();
Che dz=new Che("大众",300000,"黑色");
System.out.println(dz.name);
System.out.println(dz.price);
System.out.println(dz.color);
dz.run();
Che ad=new Che("奥迪",400000);
}
}
对象与引用
java语言中除基本类型之外的变量类型都称之为引用类型。
java中的对象是通过引用对其操作的
1)右边的“new Car()”,是以Car类为模板,在堆空间里创建一个Car类对象。
2)左边的“Car bm”创建了一个Car类型引用变量。所谓Car类的引用,就是以后可以用来指向Car 对象的对象引用。
3)”=”操作符使对象引用指向刚创建的那个Car对象。
我们可以把这条语句拆成两部分:
Car bm; //对象引用变量
bm= new Car();//对象本身
这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。
new Car(); 这个语句在堆空间里创建了实体,尽管它们也是确确实实存在的实体,但是, 我们看不见,也摸不着。 对象没有名字,也就没法直接访问它。我们需要通过对象引用来间接访问对象。 对象好比是一只很大的气球,但是我们抓不住它。引用变量是一根绳,可以用来系汽球。 Car car1;
(1)创建一根绳子,一根还没有系上任何一个汽球的绳; Car car2;
(2)就又做了一根绳,还没系上汽球, car1 = new Car();
(3)给car1 系上气球; car2 = car1 ;
(4)这里,发生了复制行为。要说明的是,对象本身并没有被复制,被复 制的只是对象引用。 结果是,car2也指向了car1所指向的对象。两根绳系的是同一只汽球
硬盘上放着.class文件,run时,把.class文件加载到内存里
Car car1=new Car();
car1.name="宝马";
car1.price=400000;
car1.showInfo();
Car car2=new Car();
car2.name="奔驰";
Car car3=car2;
car3.name="奥迪";
System.out.println(car1.name); //输出 宝马
System.out.println(car2.name); //奥迪
System.out.println(car3.name); //奥迪。car2拿了1002的地址,然后赋给了car3。紧接着car3将名字修改为了“奥迪”,则1002中name变为“奥迪”。所以输出时,car2.name和car3.name都是“奥迪”
值传递和引用传递
java中的参数传递有两种:(本质上传递的都是值,但一般在理解时细分为两种)
值传递:针对于基本类型,变量和变量值在一起存储
引用传递:对于引用类型,持有对象的地址,每次传递时,并不是把对象本身传递,传递的是对象地址
package day1.Demo;
public class Demo1 {
public static void main(String[] args) {
//值传递和引用传递
int a=10;
int b=a;
Car car2=new Car();//假设car2拿的地址值为1002
Car car3=car2;//将car2赋给car3,即将地址值1002赋给了car3
}
}
package day1.Demo;
//声明了两个独立的基本类型变量a和b
public class Demo2 {
public static void main(String[] args) {
int a=10;
new Demo2().test(a); //直接将a的值10赋给b
System.out.println(a); //输出10
}
public void test(int b){
b=20; //在此方法中b=20
}
}
package day1.Demo;
public class Demo3 {
public static void main(String[] args) {
Car car1=new Car();
car1.name="宝马";
new Demo3().test(car1);//引用类型实际不是传对象本身,而是传对象的地址
System.out.println(car1.name);//输出 奔驰
}
public void test(Car car2){ //car1将地址传递给了car2
car2.name="奔驰";
}
}



