java深层次理解面向对象
面向过程与面向对象
面向过程 | 面向对象 |
---|---|
效率高 | 效率低 |
可维护性比较低(即耦合度比较高) | 可维护性比较高(耦合度比较低) |
适合嵌入式开发 | 适合应用开发 |
面向对象详解
1.类
类是抽象的,用来描述事物的(不占内存)
2.对象
对象是具象的,是类的一个实例(占内存)
1)属性:静态的(固有特征)
2)行为:动态的(方法)
3.类和对象之间的关系
类是对象的描述,对象是类的体现
4.类的结构
1)属性
2)方法
3)构造方法
5.面向对象的特征
1)封装:将事物的内部细节隐藏起来,对外暴露访问的接口
2)继承:子类拥有父类的属性和行为。继承最大好处:提升代码的复用性
3)多态:同一个动作作用于不同的对象产生不同的行为。
多态的类型:编译时多态(方法重载);运行时多态(子类父类),
转型
6.语法:
1)类:访问修饰符 class 类名{}(类存储在方法区)
2)属性(成员属性,成员变量):访问修饰符 数据类型 属性名称;
-----普通的成员变量:存储在堆中
----类变量: 随着类的产生而产生,随着类的加载而加载,存储在方法区eg:static int age;
----常量:存在方法区的常量池中 static final String country = “CHINA”;
3)访问修饰符
----public 任何地方均可访问
----private 只有当前类可访问
----protected 在当前包中访问或派生类中访问
----default 在同一个包中可访问
4)成员方法
重载的范围是在同一类中。
5)构造器
----构建对象。
----通过构造器可以初始化成员属性(赋初始值)
----与类同名,无返回值
----可以重载
----所有的类都有构造器
----当类中没有显式的构造器时,其实存在一个无参的构造器
-----当类中有显式的构造器时,会覆盖隐藏的构造器
6)创建对象:
----new 构造器,例如Person person = new person();
----person 是变量,不是对象,=的右侧是对象
----Person p1 = null;在堆中没有具体的实例,不能p1.name;
----Person p2;局部变量没有赋值,不能访问。
7)调用方法:
对象名.方法名();
8)访问属性:
对象名.属性名;//访问除private之外的
9)局部变量和成员变量:
作用域不同
----成员变量是在类中声明
----局部变量在方法内
存储位置不同
----成员变量存储在堆中
----局部变量存储在栈中
初始值或赋值不同
----成员变量都有默认值(引用类型默认值都为null)
----局部变量没有默认值,只有显示赋值才能访问
访问修饰符
----成员变量有
----局部变量没有
三、Java程序执行流程
1)将编写的Java源程序(.java)通过编译为字节码文件(class)
2)通过JVM类加载器加载所有的字节码文件
3)加载完字节码文件后交给JVM执行引擎执行Java程序
注意:所有的Java程序最终都是在运行时数据区来运行
四、Java的内存结构
1.方法区:
----存储类的信息:访问修饰符,全类名(包名+类名),注解
----静态成员属性(static修饰的成员属性)
----存储常量(static final修饰的)
----静态方法(static修饰的成员方法)
----成员方法
2.栈
----局部变量
----对象的引用
3.堆
----new 出来的对象
----数组,接口
五、快捷键
ctrl + shift + t:查看API
ctrl + o(欧):查看类的方法变量类型等
alt + /:给出提示信息
ctrl + d:删除选择的几行
ctrl + 1:自动生成相应变量
/**回车:多行注释
六、保留两位小数
DecimalFormat df = new DecimalFormat(“0.00”);
//调用格式化的方法,结果保留两位小数
String format = df.format(result);
//将String类型转化为double类型
double area = Double.parseDouble(format);
七、字符串
//将char类型的在数组转化为字符串
String str1 = new String(new char[] {‘a’,‘b’,‘c’});
System.out.println(str1);
//将字符串转化为char类型的数组
String str2 = “hello”;//存储在常量池里
八、封装
1)概念:将类的内部细节隐藏起来,对外提供访问的接口
2)如何封装
----将成员属性声明为私有
----增加set,get方法(类似于文件的读写属性)
3)this
----用来区分成员变量和局部变量
----代表当前对象(那个对象调用this就是谁)