Java自学道路心得体会

成员与静态(static)

  • 成员变量是写在类中,成员方法是public xxx类型 xxx方法(){},它俩需要创建对象才能调用。
    静态变量是写在方法中,静态方法是public static xxx类型 xxx方法(){},只能用类名 . 方法,静态变量不可调用。

关于抽象

  • 既然已经有父类可以让多个子类继承,为何还要看起来不知道干嘛用的抽象?
  • 答:自我理解是继承正常父类,没有太多约束,一号继承其中部分方法,二号继承别的,而抽象方法是子类必须要覆盖重写的,可以做到统一性。

关于接口与父类区别

  1. 除了书写格式区别,父类中新加一个普通方法,子类可以调用。而接口无法新添加一个普通方法,因为public 后面要不就是default ,要不就是static ,再要不就是抽象的方法(abstract),所以对应起来,接口的default 对应父类中的普通方法,其他俩个一 一对应。
  2. 一个子类对应一个父类,但一个实现类可以对应多个接口。
  3. 类中的成员变量对应接口中的(public static final )常量。

静态方法

  • 直接用类/接口调用,无需用对象调用。

多态

  • 关于 多态对象.方法 的一些说明(父类引用指向子类对象)。

    这个对象c是向上转型,由Child类型转为Parent类型,好比,
    Cat cat = new Cat();
    cat.eat();
    转为了Animal cat = new Cat();
    cat.eat();
    原本是猫吃老鼠,通过多态转型为了动物吃老鼠。
    但图中
    Child c = new Child();
    c.play();
    代表孩子玩耍,
    但通过多态的向上转型变为了:
    Parent c = new Child();
    此时再c.play();
    则变成了父母玩耍,但父母类中无玩耍方法,也即并非父母就都玩耍,所以会报错(向上转型后无法调用子类特有的方法)。
    Parent c = new Child();
    这个对象c所指的类是子类,但是c引用的是父类中的前三行,即指向子类时也只指向子类中覆盖重写父类的方法。因此,我们才会说:编译看左(父类/接口中有没有该方法),执行看右(子类/实现类中有没有覆盖重写该方法)。

向上再向下转型的意义

  • 比如女朋友说给我一只宠物,那么我们可以定义一个参数类型为对象(对象:pet),返回值类型为void 的方法。
    但是我们给了一个狗或一个猫,那狗能看家,猫能作伴,那此时就需要向下转型(pet从动物类转为了Dog或Cat类),用instanceof 判断我们向上转型前是狗还是猫类,然物尽其用,若给了狗,可以调用Dog类中的看家方法,给了一只猫,则可以调用Cat类中的作伴方法。

自己写的笔记本USB接口案例的总结

  • 首先,笔记本想要使用键盘和鼠标,可以直接使用,而不通过一个统一的USB接口设备,但是,这样一来,如要升级添加一个新的设备(新类),那么则需要在笔记本中添加能用这个设备的调用(即笔记本中使用设备中,重载一个新的设备方法,传递新的参数类型),但是笔记本都卖出去,显然这样做不现实。
  • 因此,我们需要一个过度口(接口),让笔记本只负责使用有USB接口的设备,无需在乎是什么设备,不用给电脑安装新的可以设用新设备的功能。
  • 所以在笔记本的类中,我们只需要创造一个可以调用USB的方法,以USB这个接口作为参数,在方法中使用USB的方法即可。
  • 此时若有新的设备(新的类),那只需要让它连上接口(作为接口的实现类)即可。而这个时候的笔记本电脑通过USB这个接口就可以使用新设备了。

内存图的一些理解(★)

  • 用方法定义的变量是引用变量类型(即引用了地址),但是我老是想,String a = “abc”; 这个a里面的是字符串类型的东西,其实里面是地址值,只是因为String 方法自带了toString方法,把地址值转变为了字符串,其实应该是字符串 “abc” 在堆内存中的地址,因为 String a = “abc” 应该是
    -String a = new String ;
    a.toString;
    应该是这样才对。
    所以我经常看到引用类型的时候想到总是,哎!它这个值不是给另一个引用类型变量了吗?怎么这个已经被赋值的引用变量还能再去点个方法呢?难不成,我得到的值还能引用方法?
    其实是类似于:
    “abc”.method 一样,a是被赋值了,看起来a好像是被赋值为字符串“abc”,其实“abc”是 a.toString 的调用,所以a里面是“abc”的地址,所以我们才可以用看起来好像是被赋值的a来调用别的方法。我们只是用toString方法打印出来“abc”这个符号(样貌),其实“abc”实际存的可是地址值哦,所以“abc”.method 也是成立的,千万不要再把引用类型变量看成被赋值的普通变量了。

关于面向对象和面向程序

  • 面向程序:是主要在乎程序的具体的写法。具体的里面的功能,主要考虑里面写什么,然后通过main方法调用,来实现一定功能。
  • 面向对象:是主要在乎能调用什么,不在乎具体方法里面有什么功能,只管调用。所以当用main方法执行时,代码显得十分简洁,因为具体的方法在另外地方写,main方法只管创建一个关于该类的对象,再调用即可(调用成员变量/方法,用new 创建一个对象来调用)。

关于创建的对象的一些自我理解

  • 创建对象基本上是XX(引用数据类型) XX = new XX();
  • 所以对比一下基本数据类型的定义,eg:int a ;
  • 所以我自己的理解是,对象就是基本数据类型中的变量。

关于集合Array List<>的一些理解

  • 这个问题是我在Java SE阶段写的学生管理系统遇到的一个烦神很久的问题。我以为第一个情况是将集合初始化。

    • 详述:遇到的问题是我一开始将new一个新的集合放在while循环中以至于每次循环导致集合每次变成空的。然后拿出来的时候听别人说什么要ArrayList = NULL;来初始化,说什么不用new 一个,但是我连new 都没有,因此在内存里面根本就没有创建一个集合。
    • ArrayList = NULL;
      并非初始化,而是完全将集合置空,不存在的意思。
    • 而ArrayList = New ArrayList<>();
      则是先定义了一个空的集合来给你用。

多线程

  • 并发与并行
  • 前者是海绵宝宝有一次晚上答应珊迪、派大星、蟹老板帮忙,然后一晚上跑来跑去(切换)执行任务。
  • 而后者则是海绵宝宝变成好几个同时去执行。
  • 进程与线程
  • 前者是指,比如我点了电脑管家这个程序,那么它就会被从硬盘转到内存去执行,转到内存后的程序叫做进程。
  • 后者是指,点击电脑管家里面的病毒查杀或者是清理垃圾执行时就会开启一条应用程序到CPU的路径,CPU可以通过这个路径执行任务,而这个路径就叫做线程
  • 我的电脑CPU是Inter Core(核心) i5-6300HQ,这个CPU是四核心、四线程,也就是最多可以执行四个任务。比如电脑管家的病毒查杀、清理垃圾、电脑加速这三个任务如果同时点开,创建了三条到CPU的路径(线程),那么如果我的CPU是一个线程的,它为了同时执行,不得不像海绵宝宝那样跑来跑去(切换)任务,这样其实很慢的(每个任务被执行到的几率是三分之一)。但是如果换成了我的四线程来跑的话,一个线程照顾三个任务,那为了更快,四个线程会同时在三个任务间跑来跑去(每个任务被执行的几率翻了四倍 。ps:不是100%哦,因为有可能四个线程同时跑了一个任务哦),这样就很快了。
  • 但是多个线程之间不会互相影响,各跑各的。
  • 不过这个切换很快的,感觉不出来。

数据库服务器软件

  1. 数据库服务器软件包含若干个服务器,而这些服务器存在形式是文件夹。
  2. 服务器包含若干个表,而这些表的存在形式是文件(.frm)。
  3. 表包含若干数据记录,而这些数据记录的存在形式是文件里面的数据信息。

SQL

  • SQL对应着普通话,关系型数据库(eg:MySql、Oracle等)对应着中国人,而这些数据库自己的语言对应着各地的方言,因此SQL是统一标准的语言。

三大范式

  • 一些概念(通俗版)
  • 函数依赖:一对夫妻的亲孩子,或者孩子是父亲的,但父亲二婚,父母中母亲确认不了的,再或者是光棍父亲带着孩子确认的。
  • 完全函数依赖:孩子的确定是跟父母都有关系的。
  • 部分函数依赖:父母带孩子确认,发现孩子是母亲的,跟父亲没关系(无需靠夫妻二人皆确认的)。
  • 传递函数依赖:函数依赖确定孩子,通过孩子的函数依赖确定孙子。
  • 码:好几个孩子都只由一个父亲或者一对夫妻两人都确认的,那这个父亲或者这对夫妻就是表的码。
  • 第一范式:表中每一列就是单独一列,不会大列套几个小列。eg:学院列下面还有部门列和部长列。
  • 第二范式:一范式基础上,消除部分函数依赖(父母是孩子的亲父母)。
  • 第三范式:二的基础上,消除传递函数依赖(孩子没有后代)。

一些我以前一直不懂的名词

  1. jar包:其实就是一系列类的集合体,比如用Java连接数据库,但是数据库多种多样,我就可以定义一个接口(即一个规则:JDBC),而这个接口的实现类即各个数据库厂商为了能带动他们数据库所编写的实现类集合,即驱动jar包(驱动用来连接数据库的jar包)。
  2. 实体类:实体类映射的是数据库的表,你对实体类操作,可以直接对应到数据库的表的操作。
  3. 类对象

JDBC

  • 概念:Java Database Connectivity Java数据库连接,Java语言操作数据库
  • JDBC本质:官方定义的一套操作所有关系型数据库的规则(接口)。各大数据库厂商去实现这套接口(写的实现类就是数据库驱动),提供数据库jar包。我们可以使用这套接口(JDBC)编程,真正执行代码是jar包中的实现类。
  • 步骤:
    1、导入jar包
    2、注册驱动
    3、获取数据库连接池对象 Connection
    4、定义sql
    5、获取执行sql语句的对象 Statement(这里不懂什么叫获取执行sql语句的对象 Statement,Statement不是一个接口吗?)
    6、执行sql,接收返回值
    7、处理结果
    8、释放资源

JDBC的对象

  • DriverManager(Class):驱动管理对象
    1、注册驱动:告诉程序使用哪一个数据库驱动jar包。 Class.forName(“com.mysql.jdbc.Driver”); PS:这里其实用的是这个类里面的一个静态代码块来驱动的。
    2、获取数据库:getConnection(String url, String user, String password);这里的url是 :jdbc:mysql://ip地址(域名):端口号/数据库名称 PS:如果连的是本机数据库可以省//… …/内的内容。
  • Connection(interface):数据库连接对象(以下说的对象并非是指接口的对象,而是接口实现类的对象,这个老师讲的我糊涂了)
    一、功能:
    1、获取执行sql对象:
    Statement createStatement();
    PreparedStatement preparedStatement(String sql);
    2、管理事务:
    开启、提交、回滚。
  • Statement(interface):执行sql对象
    1、boolean execute(String sql)
  • ResultSet:结果集对象
  • PreparedStatement:执行sql对象

网络相关的知识点

  • 网络通信协议
    1、TCP/IP:在传输数据前需要建立三次握手来确保数据传输安全性,完整性。常用于:下载/上传/发送/接收文件,浏览网页。
    2、UDP:耗资小,通信效率高,偶尔会丢失部分数据,常用于:发语音,打字,发视频。特点:数据被限制在64kb以内,超过了就不能传输了,所以有的时候说您输入的字超出范围。

配置文件是什么

  • 比如你在你电脑上用你的数据库写了代码,完事后打包发到别人电脑上,但是你俩电脑用的不是一模一样的数据库,就用不了这个代码。
    但是如果有了一个东西,可以更改这个代码所依靠的数据库,那就可以了,这个就是配置文件,把配置文件中用的数据库改为你自己的就行。

系统是什么

  • 即若干部分相互联系、相互作用,形成的具有某些功能的整体。

——
框架一类的解释

  • IOC框架:
    原本代码是这种相互关联影响的

现在用了IOC容器就降低了耦合度,彼此之间单独操作,不互相影响(某个对象需要什么,IOC就自动生成什么,各个对象(类)互相独立)

  • IOC框架下的产品:
    比如Spring框架

面向编程

  • oop&aop(用作切面)
    oop是面向对象编程,而aop是面向切面编程。
    -前者是分成各个类,来提高代码的复用性。
    -后者是如图
    因此将代码从原来的二维平面(复用类与类中的方法)升级为三维(复用具体代码且不增加耦合性)。

IOC(控制反转) & DI(依赖注入)

  • 前者是:
    原本A类需要一个B类来配合使用,所以A会找一个或者创建一个B,这样提升了耦合性。
    但现在用IOC容器,IOC来找或者创建B,让A找或者创建B的权利交给IOC。
  • 后者是:
    在容器(比如:Spring容器)创建B的时候,将B依赖属性通过配置(配置文件)进行注入。

SpringBoot一些名词解释:

  • 单实例的:也就是从IOC容器中拿出来的,互不干扰的组件。

枚举类型(enum)是什么

  • 枚举说白了,就是一堆固定了值的类型。
    比如说你现在声明一个变量string week ,要给它赋值,很明显它的值应该是从星期一到星期日,也就是说你只能给它赋这七个中的一个才有意义。
    为了防止用户录入了错误的信息,设置了枚举变量,规定只能选择此变量中的一个值。

四大元注解

  1. @Target:表示我们的注解可以用在哪里,是用在方法上,还是类上面。
  2. @Retention:表示我们的注解在什么地方有效。
  3. @Documented:表示将我们的注解表在JavaDoc中(Java生成的文件)。
  4. @Inherited:表示子类继承父类的注解。

关于static

  • 静态变量:static int age; int age;
    这两个一个静态,一个非静态。
  • 静态方法:static void Method1(){}
    void Method2(){}
    这两个一个静态一个动态。
  • 先有静态,再有非静态,所以非静态方法可以调用,静态与非静态变量,而静态方法只能调用静态变量。

不太清楚的问题

  1. 为什么要用Java进行数据的增删改查,而不直接在数据库更改?
  • :因为后期对数据要进行大量的增删改查,倘若每次操作都要进行一次sql语句的执行,岂不是很麻烦?可能用navicat感觉不太出来,觉得写一次多次利用。。。这里我也不知道了,我感觉Java不也是调用sql语句吗?两个都是,我不太清楚了。。。还是因为Java用的是JDBC规则,可以直接使用多种关系型数据库?也许是吧?

三大范式

微服务

  • 理解为:比如,淘宝有下单,放入购物车,收藏功能等等,把这些功能单独抽离出来写,并且有各自的服务器,可以各自更新,就是微服务,是一种框架风格。

Java自学道路心得体会相关推荐

  1. java自学入门心得体会 0.1

    之前记录了java的简介和基本语法 这里记载下对象和类 不太懂的我理解java对象和类的概念很模糊,因为有了 Abstract修饰符 让对象与类更加的扑朔迷离 - - 所以,就像很开放的语言,创建对象 ...

  2. java课设的总结和体会,JAVA设计培训心得体会【两篇】

    [www.hywsbj.com--心得体会] [导语]培训是给新员工或现有员工传授其完成本职工作所必需的正确思维认知.基本知识和技能的过程.基于认知心理学理论可知,职场正确认知的传递效果才是决定培训效 ...

  3. java课程设计心得体会绪论

      java课程设计心得体会绪论[篇1] 在上学期的最后一周和本学期的第一周,我和同组的学员在学校机房进行了JAVA暑期实训,现在已经结束了. 回首上学期的java学习,重点还是在学习概念等一些常识性 ...

  4. java容器doc_关于Java容器类学习心得体会.doc

    关于Java容器类学习心得体会 由于小编对C++比较熟悉所以学习Java应该重点体会Java带来的新概念本文基本上是Java标准库中集合框架的基本概念没有例子写本文的目的在于方便小编很长时间后若是忘了 ...

  5. java实训心得感想30字,java实训心得体会感想

    java实训心得体会感想 Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言.通过本次实训,受益很多,下面谈谈个人的心得体会.本文是java实训心得,希望对大家有帮助. java实训心得篇一 ...

  6. java实验2总结心得,java实验的心得体会

    java实验的心得体会 java实验心得体会篇一:java实验总结 1. 设计一个Person类,包含:姓名,年龄,性别.要求:该类至多只能创建一男.一女两个对象! 2. 设计一个测试类Test,创建 ...

  7. Java简易计算机实训心得,(计算机java实训心得体会.doc

    (计算机java实训心得体会 计算机java实训心得体会 计算机java实训心得体会 计算机java实训心得体会 计算机java实训心得体会 此次只实训了短短的三周.虽说时间很短,但其中的每一天都使我 ...

  8. java项目的心得体会_java设计程序心得体会

    学习Java程序设计的方法和技巧? <thinking in java>这本书一定要看,学JAVA语言不看这本书是不可以的,当然如果你只是想应付考试那算我没说. JAVA是一门理论性很强的 ...

  9. java程序设计比赛心得体会_对Java程序设计的感想.doc

    对Java程序设计感想学习已经多月了,虽然很累,但是觉得学习JAVA非常充实,在学习JAVA过程中,对学习JAVA有一些深刻体会 我本人觉得JAVA就是一门语言但不同的是它是一门计算机语言,是人类发明 ...

最新文章

  1. 用户画像-撸一部分代码啊
  2. 什么是路由器交换机?路由器交换机介绍!
  3. sql优化技巧_使用这些查询优化技巧成为SQL向导
  4. 在esx server VI里导入其它虚拟机
  5. Lamda和kappa架构
  6. 《Elasticsearch 源码解析与优化实战》样章-第 6 章 数据模型
  7. vue+element+node构建单片机控制系统
  8. android fake gps,假GPS定位(Fake GPS Position) v4.5 安卓版
  9. Java面试题附答案(面试必会)
  10. win10自带c语言编程猫,编程猫教程:编程猫如何做游戏?
  11. 如何给多段视频制作一行滚动字幕,并添加GIF表情包
  12. 2017年电信业值得关注的7大颠覆性技术
  13. 《Android开源库》 Google 最新Hover Menu(悬浮菜单)
  14. 来了 来了 他真的来了
  15. FreeRTOS临界段的保护
  16. 如何优雅的使用C语言绘制一只小猪佩奇
  17. SQL SERVER DATEADD()函数说明
  18. Django Rest Framework框架
  19. Arduino实验——蜂鸣器播放《致爱丽丝》
  20. java.lang.ClassNotFoundException: sun . jdbc . odbc . JdbcOdbcDriver

热门文章

  1. Rustdesk安装教程
  2. Win10平台中ANSYS 18.2二次开发环境搭建及关联教程
  3. java中没有直接调用matlab的接口函数
  4. 2022年一级建造师水利水电工程考试模拟试题卷及答案
  5. 转载 Mysql安装过程
  6. linux ubuntu重启不了系统,求教:ubuntu重启后进不去系统了,还有另外一个问题
  7. 黑马程序员------毕老师视频笔记第23-24天------网络编程(1)
  8. ESP01s + MQTT + uni-app(Vue) 入门物联网继电器开关实践
  9. Post和Put的区别
  10. 某机房ups电源更换蓄电池的一次作业过程