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就是谁)

绝对想你所想,超乎想象!够详细,够给力! 目录 1. Jvm内存空间结构是什么样的? 1 程序计数器 1 Java栈 1 本地方法栈 2 堆 2 方法区 3 2. Jvm堆内存的划分结构和优化 3 2.1. 原理 6 2.1.1. 年轻代 6 2.1.2. 年老代 6 2.1.3. 持久代 7 2.2. 参数说明 8 2.3. 疑问解答 9 2.4. 垃圾回收器选择 10 2.4.1. 串行收集器 10 2.4.2. 并行收集器(吞吐量优先) 10 2.4.3. 并发收集器(响应时间优先) 11 2.4.4. 其它垃圾回收参数 11 2.5. 辅助信息参数设置 12 2.6. 关于参数名称等 13 3. JVM服务参数调优实战 14 3.1. 大型网站服务器案例 14 3.2. 内部集成构建服务器案例 15 4. 常量池在jvm的哪个空间里边? 17 5. jvm垃圾回收是什么时候触发的? 17 5.1. 那究竟GC为我们做了什么操作呢? 17 5.1.1. Jvm怎么判断对象可以回收了? 18 5.2. 下面我们来看一下几种垃圾收集算法 18 5.2.1. 在JDK1.2之前,使用的是引用计数器算法, 18 5.2.2. 根搜索算法 19 5.2.3. 引用的分 19 5.3. 方法区也是会被回收的 20 5.4. 下面我们来逐一介绍一下每个垃圾回收器。 22 5.4.1. 1、 Serial收集器 22 5.4.2. 2、 ParNew收集器 23 5.4.3. 3、 ParallelScavenge 23 5.4.4. 4、 ParallelOld 24 5.4.5. 5、 SerialOld 24 5.4.6. 6、CMS 24 5.4.7. 7、 GarbageFirst(G1 ) 26 6. 常量池如何触发的垃圾回收? 28 7. 垃圾回收从哪里开始检测树进行回收?根节点是什么? 28 7.1. 目前java中可作为GC Root的对象有 29 8. Redis怎么判断对象可以清理了? 29 9. Redis怎么提高命中率? 29 10. Finalize中调用垃圾回收方法,再调用方法会回收么? 29 11. Int进行自增操作,如何保证线程安全? 30 12. Int a=1是原子方法,布尔型进行赋值是原子方法么? 30 12.1. 多线程原子操作的安全性 31 13. Cas怎么实现unsafe? 32 13.1. Unsafe 32 13.2. CAS 32 13.3. 由CAS分析AtomicInteger原理 33 13.4. CAS的缺点 35 14. Map数据结构? 35 14.1. 一、定义 36 14.2. 二、构造函数 36 14.3. 三、数据结构 36 14.4. 四、存储实现:put(key,vlaue) 38 14.5. 五、读取实现:get(key) 41 15. 一百万数据放Arraylist数组,怎么放? 在哪个代? 42 15.1.1. 调整数组容量 42 16. Hashmap和 concurrentHashmap除了线程安全 还有什么区别,put的时候是怎么处理的。 43 17. 数据库组合索引,储存在一个叶子节点还是多个? 44 17.1. 索引的利弊与如何判定,是否需要索引: 44 17.1.1. 索引的好处 44 17.1.2. 索引的弊端 44 17.1.3. 如何判定是否须要创建索引 44 17.2. 复合索引优化 45 17.3. 下面是一些常见的索引限制问题 45 17.3.1. 使用不等于操作符(<>, !=) 45 17.3.2. 使用 is null 或 is not null 45 17.3.3. 使用函数 45 17.3.4. 比较不匹配的数据型 46 17.4. 关于索引的排序 46 18. 数据库没有orderby默认如何排序。 46 19. 分布式事务如何实现。 46 19.1. 1 事务/分布式事务 47 19.1.1. 1.1 事务 47 19.1.2. 1.2 分布式事务与 XA 规范 47 19.2. 2 两阶段提交协议 47 19.2.1. 2.1 预提交阶段 48 19.2.2. 2.2 提交阶段 48 19.3. 3 分布式事务应用框架 48 19.3.1. 3.1 角色 48 19.3.2. 3.2 交互时序 49 19.3.3. 3.3 关键点 50 19.3.4. 参考 50 20. Jvm底层源码 51 21. 二叉树怎么实现的? 51 22. Executourservice 数据结构。哪种只能执行一个线程。 Cache怎么实现的 fixed线程如果中断,线程回自己销毁么? 51 23. 栅栏的原理和实现。 51 23.1. 1. CyclicBarrier简介 51 23.2. 2. CyclicBarrier数据结构 52 23.3. 3. CyclicBarrier源码分析(基于JDK1.7.0_40) 52 23.3.1. 3.1 构造函数 52 23.3.2. 3.2 等待函数 53 23.4. 4. CyclicBarrier的使用示例 57 23.4.1. 示例1 57 23.4.2. 示例2 59 24. Blockingqueue有几种形式?各自的编码方式。 72 24.1. Queue接口 72 24.2. BlockingQueue接口 73 24.2.1. ArrayBlockingQueue 74 24.2.2. LinkedBlockingQueue 78 24.2.3. LinkedBlockingDeque(双向并发阻塞队列) 84 24.2.4. PriorityBlockingQueue(优先阻塞队列) 85 24.2.5. 总结一下阻塞队列 90 25. Tomcat 如何管理servlet? 90 26. Servlet生命周期 90 27. 没有缓存,如何实现领券并发操作? 92
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值