一、java初印象

工作了些时候,用的java语言,看了下thinking in java ,特在此记录和分享些自己的理解。

一、关于程序设计,就是对于复杂性的管理

关于复杂性,可以认为有两个方面的考虑:待解决问题的复杂性, 解决该问题工具的复杂性。待解决的问题,程序员不好把控,而解决的工具,就是编程语言。

二、关于java是完全面向对象的语言

1.java完全面向对象,需要以“类”级别才能独立存在,比如方法,是不能独立存在的,一个方法总会要属于一个类。

这个“类”级别,并不完全是class, interface,enum也是“类”级别。

对于“类”级别的存在,可以理解成一个一个人, 有人的地方就有江湖,有类的地方类之间就可能有关联,对于这种关联,比较好的一种理解方式是“把类看成服务者”(同时也是别的类的“被服务者”)。这种关系从小了看就是A类调用B类的方法, 从大了看也可以是某一个系统调用另一个系统提供的接口。

2.关于完全面向对象,就必须考虑代码复用的问题,java中对于复用的解决方式有两种:组合和继承。

组合:汽车拥有引擎,不必在汽车里面自己写引擎如何实现,而是调用引擎类,放到汽车类里面即可;继承之后再讲。

对于设计来说,一般是优先使用组合避免过多使用继承的原则。(虽然继承是java最重要的特性之一)

3.关于继承,简单的讲就是extends,A extends B ,那么A就拥有B中的所有元素,这样才写代码的时候就可以避免一些属性过多的重复写。

4.关于多态,常见的场景如下:

 1 class Animal {
 2
 3   public void f(){}
 4 }
 5
 6 class Fish extends Animal {
 7   @Override
 8   public void f() {}
 9 }
10
11 class Dog extends Animal {
12   @Override
13   public void f() {}
14 }
15
16 public class Test {
17   public static void main(String[] args) {
18     Animal animal = new Fish();
19     animal.f();
20   }
21 }

注意声明animal这里,父类声明指向子类对象, 可以把Fish换成Dog,其他地方不变,执行f()方法的时候系统会自动判别f()方法所述的对象,动态绑定到底是运行Fish中的f(),还是运行Dog中的f()。这个就是多态。

三、java中的四个特征:抽象、封装、继承、多态

参考二中的内容,把“类看成服务者”的范畴,对应的就是抽象和封装---level1

为了减少代码重复设计出来的父子关系,对应的就是继承--------------level2

在继承的基础上能够动态判定执行的方法,对应的就是多态------------level3

时间: 2024-10-13 00:56:33

一、java初印象的相关文章

OpenCL学习笔记(一):摩尔定律、异构计算与OpenCL初印象

关于摩尔定律: 摩尔定律1965年提出,晶体管密度是按照每年翻倍发展的,之后的趋势也是这样--每一代芯片的的时钟频率提高50%,而同时工艺节点减小了0.3,功耗密度翻倍(保持功耗相同的情况下,面积0.7*0.7=0.49,因此提高频率使得性能提升了):而在2000年中期之后,出现了物理尺寸更小的器件,意味着,我们没有办法保持功耗密度不变,而同时提高频率,结果我们看到自此之后,时钟频率并没有显著提高,需要通过并行来提高性能,所以多核CPU流行起来.即使是最基本的处理器,超标量和无序指令执行等高级体

Protocol Buffers(protobuf)java初体验

由于项目需要所以简单的研究了下protobuf.我也是参照网上的博客,所以大部分内容我也就不重复造轮子了.首先protobuf介绍点击这里,使用介绍点击这里,使用demo看这里.我个人的第一个例子也是参照这个demo来的,不过其中我有遇到一些问题,所以揪出来说说,也就给自己做个笔记,方便查阅. 基本的东西相信大家也了解了,直接步入主题了: 1.限定修饰符介绍 required\optional\repeated,之前给定的博客已经有这个介绍了我也不多说,这里把一些小玩儿拿出来讲讲 ①.requi

初印象至Vue路由

初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路由使用超链接 以下内容来自官网,js使用ES6 如何在vue项目中使用vue-router HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="htt

Vue.js之初印象

一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称自己是front-end developer.趁这个失业期,vuejs的学习起哟. 二.简介 1.vue.js是什么 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们

uml时序图的初印象-------Day64

最近有好多想法迫不及待的想去实现,可是事实上是在那些最开始想的非常明白,感觉会没问题的地方也总是会出现问题,导致略微有些急躁,还是要淡定啊,又到了周末,明后天要收拾东西搬家,不知道宽带能不能顺利的给挪过去,想提前来记录下这周的工作吧. 总的来说,这周完成了界面的初始设计,然后就是这概要设计了,结果整合下来,word文档都有近百页了,太多时序图了,画的我都有些头昏脑涨.其实,在很久之前的某公司,我面试的第一道问题就是时序图,结果当时的我是可怜的一片茫然,结果也就自然而然了.这次再看时序图,又理解了

gulp初印象

几个月前三木君向我推荐过gulp,到现在因为工作需要才接触到它,真的很惭愧,在此记录下对gulp的初印象. 全局安装: $ npm install –global gulp 一个gulpfile.js文件: 这个文件需要在项目的根目录下创建.默认任务(什么也不做): var gulp = require('gulp'); gulp.task('default', function() { // place code for your default task here }); 下面的命令将执行这

Django初印象之视图(view)

一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] 二.普通view的样子 下面是一个以HTML文档的形式返回当前日期和时间的视图: from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.

{Java初阶系列一}--------Java基本简介

{Java初阶系列}--------Java基本简介 本人为自学Java系列,内容来自于中国大学mooc华东师范大学陈育良教授<Java核心技术>,在此感谢老师! 首先说明下Java作为一门编译性语言是如何运行: 首先由程序yuan编写的java程序,由javac.exe编译成字节码文件.class,再通过java.exe在jvm上运行成电脑可以识别的机器语言-------这个也被称为"一次编译,多次运行,跨平台操作",这都是jvm的功劳. 2. 初次学习我碰到疑问:jre

Java之初印象

Java语言的跨平台性: Java语言的编程过程: 只要实现了特定平台下的解释器程序(JVM),Java字节码就能通过解释器程序在该平台下运行,这是java跨平台的根本,当前并不是在所有平台下都有相应的Java解释器程序,这也是Java并不是在所有平台下都能运行的原因,它只能在实现了Java解释器程序(JVM)的平台下运行 另: Java兼顾解释性与编译性语言的特点: JAVA源文件—>.class字节码文件 (编译型) .class文件在OS上运行的过程则是解释型的(JVM充当了解释器的作用)