目录
面向对象和面向过程的设计思想
面向过程:
面向对象:
类:
结构:
1.发现类 汽车类
2.定义类的成员变量(属性) 名词
3.定义类的成员方法(行为/功能) 动词
对象
概念:
成员变量:
局部变量:
方法:
对象与引用
值传递和址传递
作用:
static关键字
概念
static属性
代码块
包
概念:
作用:
包的命名规则:
访问权限修饰符
概念:
四种修饰符:
procedure oriented programming 缩写 POP
分析出解决问题所需要的步骤,然后把步骤一步一步实现。
面向过程直接关注流程。
object oriented programming 缩写 OOP面向对象的编程语言
先设计,对现实中客观的事物进行分类,创建此类,在类中定义功能,创建出具体的对象,
让对象去做具体的事情。
类是对象现实事物的抽象,实际生活中,选有对象(具体存在)。
public修饰的类,类名必须与文件名一致
非public修饰的类,类名可以与文件名不一致
[访问权限修饰符] [修饰符,abstract,final] class 类{
}
成员: 类的成员,在类中定义 定义在类中,方法体之外.
数据类型可以是java中的支持的任意类型(引用类型,基本类型)
成员变量可以初始化,也可以不初始化,不初始化时,java会用默认值为其初始化
引用类型类型默认值是null 整数是0,浮点数是0.0 boolean是false char是' ';创建对象时,会从类中向对象中复制一份成员变量
在构造方法,成员方法,代码块中可以使用成员变量
语法:数据类型 变量名;(也可以进行初始化)
局部变量: 定在方法,构造方法,代码块中 使用前必须赋值
数据类型可以是java中支持的任意类型,方法的参数也是局部变量
方法运行时局部变量创建,运行结束后局部变量销毁
成员方法: 定义在类中,没有被static修饰的.通过对象调用。
语法: [访问权限修饰符] [修饰符] 返回值类型 方法名(参数列表){
方法体;
}
具体存在的客观事物,可以拿来使用的,万事万物皆为对象。
例:Car bm = new Car() ;
new Car() new以Car为模板在内存创建对象,Car()为构造方法。(有一个构造方法,方法名与类名相同)
Car bm/bc 声明了一个Car类型的变量。
= 将创建的对象赋给了左边的变量。
bm 表示一个具体存在的对象,可以使用。
变量分类
定义在类中,在方法体之外。
数据类型可以是java中的支持的任意类型(基本类型、引用类型);
成员变量可以初始化,也可以不初始化,不初始化时,Java会用默认值将为其初始化;
引用类型默认值为null,整数是0,浮点是0.0,boolean是false,char是' ';
在构造方法,成员方法,代码块中可以使用。
定义在成员方法,构造方法,代码块中;
使用前必须赋值;
数据类型可以是java中支持的任意类型;
方法参数也是局部变量。
成员方法:定义在类中,没有被static修饰的,通过对象调用。
构造方法:用来初始化对象的方法。
特点:构造方法名与类名相同,没有返回值,也不需要void修饰,每个类中都至少有一个构造方法,也可
以定义多个,每创建一个对象时,至少调用一个构造方法。
如果类中无构造方法,默认会提供一个无参的,一旦定义有参的构造方法,默认的无效。
方法的重载:指同一类中具有相同的名字,但参数方法不同的方法。
参数不同:个数不同,类型不同,顺序不同。
方法重载与返回值无关。
● java中在调用方法传递参数时,有值传递和址传递俩种。
值传递:(形参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
代码:
public class Demo {
/*
基本类型值传递
*/
public static void main(String[] args) {
Demo d = new Demo();
int a = 10;
d.test(a);
System.out.println(a);
}
/*
形参b
用实参a的值,直接对b进行了赋值,在内存中有两个独立的存储空间 a,b
*/
public void test(int b){
b = 20; //b的值发生改变 不会影响到a
}
}
运行结果:
● 引用传递:(形参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形 式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
代码:
public class Demo {
/*
引用类型 在传递时,传的是对象的地址
*/
public static void main(String[] args) {
Demo d = new Demo();
Person zs = new Person("张三", 20);
d.test(zs);//只是把对象的地址传递给了 p
System.out.println(zs.name);//李四
}
/*
*/
public void test(Person p){ //p和zs指向的是同一个对象
p.name = "李四";
}
}
运行结果:
由此看出,基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。
变量分类:(按数据类型)
基本类型: byte short int long float double char boolean
引用类型: 数组,String,自定义的类
this关键字
this关键字代表当前对象 ;
使用this关键字引用成员变量;
使用this关键字引用成员方法。
在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。
代码:
public class Person { //成员表变量 public String name; int age; //构造方法 public Person(){} public Person(String name,int age){ this.name=name; this.age=age; } //成员方法 哪个对象调用showInfo方法,那么name,age就是哪个对象中的属性 //this 表示当前正在操作的对象 在成员方法,构造方法中使用成员变量,使用this调用. public void showInfo(){ System.out.println("姓名:"+this.name+" 年龄:"+this.age); } }
运行结果:
static被称为静态,可以用来修饰类的属性,方法,代码块,内部类。
• 随着类的加载而加载
• 优先于对象存在
• 修饰的成员,被所有对象所共享
• 可不创建对象,直接被类调用
静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个,且静态方法不能使用非静态成员变量。
代码块:类似于一个没有名字的方法,只有方法体。分为实例代码块和静态代码块。
实例代码块在创建对象之后,调用构造方法之前执行。
静态代码块在类加载的时候执行只执行一次。
public class Demo {
String name;
static String country = "中国";
public Demo(){
System.out.println("无参构造");
}
/*
代码块: 类似一个没有名字的方法.
代码块: 实例代码块 在创建对后执行,调用构造方法之前执行,每创建一次对象,执行一次
静态代码块 在类加载时候执行,只执行一次 ,多个静态按照先后顺序
*/
{
System.out.println("实例代码块");
}
static{
System.out.println("静态代码块1");
}
static{
System.out.println("静态代码块2");
}
//静态代码块按照代码顺序执行
public static void main(String[] args) {
new Demo();
new Demo();
}
}
运行结果:
类什么时候加载?
• main方法在哪个类中执行,这个类就会加载的.
• 创建某个类的对象,
• 调用某个类中静态属性,方法
为了更好地组织并管理类,java提供了包机制,用于区别类名的命名空间(类路径中的一部分)。
•避免类重名
•按照功能管理类
•控制访问权限
包名都要小写
第一级为项目类型:com(商业)org(组织)edu(教育)gov(政府)
第二级为公司名称:oracle sun huawei
第三级为项目名称:erp,cms
第四级为功能模块:窗口 数据访问层 服务层 工具类
用来修饰类,成员变量,成员方法,内部类,控制对其访问权限,访问权限和包是密切相关的。
public 公共的 可以修饰类,成员变量,方法,内部类,在任何类中都可访问到
protected 保护的 可以修饰成员变量,方法,内部类,在不同包中的子类可以访问到
default 默认的 可以修饰类,成员变量,方法,内部类,在同包的子类可以访问到
private 私有的 可以修饰成员变量,方法,内部类,只有在本类中可以访问