发表于: 2020-05-23 22:02:49

1 1439


加油!!!


今天完成的事:复习并记录下前面的知识和一些细节问题


变量的作用域:有效范围在同一个大括号内;出了大括号无法访问{ int i=10 }

变量可以重新赋值,但是不能重复声明

int i=10;

i=100;但是不能 int i=100


成员变量(在类体中)与局部变量(在方法体中,包括形式参数)

public class test{

int i=10;int m;//成员变量

public void m2(int a= 10){//局部变量

int k=100;//局部变量

}


八种基本数据类型的默认值要记住

byte,short,int,long  0

float,double 0.0

boolean    false

char   '\u0000'

字符型 char 底层占用两个字节,一个字母占用一个字节,一个汉字占用两个字节

所以char可以用来储存一个汉字 char a='中';

long和int之间存在自动类型转换

long i=100//系统会默认i为int类型

long i=100L//后面加上L,就不存在了,只是赋值运算

强制类型转换需要加强制类型转换符,但是可能损失精度

byte,short,char做混合运算时,会先自动转换成int类型,再做运算

byte b =10; short c =100

int a= b + c;


三目运算符:boolean 表达式? 表达式1 :表达式2;

true:表达式1 false:表达式2


switch语句中,可以不写break和default,但是会发生case穿透现象

switch() {

case 'A' :java语句

break

case ‘B’:java语句

default:java语句

}

for循环

for(。。。){

        for(。。。)

              输出。。

在嵌套中:第一个for执行一次后,下一个for语句会执行完一个完整的循环到结束
然后第一个for循环执行第二次,下一个for语句继续执行玩一个完整的循环

方法的定义就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用

定义方法的语句
【方法的修饰符列表】 方法的返回值类型 方法名(方法的形式参数列表){java语句;
}

如果一个方法的返回值类型不是void,那么在方法体中必须使用return 语句来返回数据。return语句一旦执行,则方法结束。

方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。



关于方法的重载

1、发生在同一个类中

2、方法名相同

3、参数列表不同,和返回值类型无关

4、和方法的修饰符列表无关


方法的执行原理:

方法在调用的时候,才会给该方法在内存中分配空间

方法在调用的时候在 栈 中分配空间(JVM内存中有一块内存是栈内存)

方法调用也称为压栈

方法结束也就是弹栈


递归调用
调用:类名. + 方法名(参数/方法的参数列表)递归比较占内存

以下程序因为递归没有结束条件,所以一直压栈,没有弹栈,导致栈内存溢出错误!所以递归必须要有结束条件

public class test(){

    public static void main(String[ ] args){

             m1( );

      }

    public static void m1( ){

             m2();

      }

}


面向对象的三大特性:封装,继承,多态

类是抽象的和对象是实际存在的(学生和张三)

类的定义

 类的修饰符+class +类名+{类体:属性和方法组成}


对象的使用:引用.  去间接访问堆中的对象(也叫 一个引用类型.    或者 局部变量.)

封装特性:
    1、属性私有化
    2、对外提供公开的setter and getter
       set方法和get方法的方法名应该遵循规范

关于构造函数

 作用:1、创建对象2、给成员变量赋值

如果一个类没有提供构造方法,系统默认提供无参数构造方法
如果一个类已经手动的提供了构造方法,那么系统不会提供任何构造方法
创建类的对象时会调用构造方法 (对象创建后就已经调用了)编译期



基本数据类型中局部变量不会发生值的传递,但是引用数据类型中,在同一个类下,会发生值的传递(因为他们

栈中的内存地址不同,但是都指向堆中的同一个对象

  

this关键字
什么是this?
this是一个引用类型,保存了内存地址
在堆中的每一个java对象都有this,
this保存内存地址指向自身。

可以用在哪里:1、可以用在成员方法中2、可以用在构造方法中


static关键字(静态变量、静态方法、静态语句块)

静态语句块和实例语句块(执行顺序自上而下)
静态语句块在 类加载阶段执行 且只执行一次


变量分类:

1、局部变量2、成员变量(非静态变量)3、静态变量

什么时候变量声明成静态变量?

如果这个属性所有的对象都有,并且这个属性的值都是相同的,则该属性声明成静态的属性

成员变量:创建java对象的时候初始化

静态变量:在类加载阶段赋值,且只赋值一次

静态变量被储存咋方法区中,是类级别的,所有java对象共享


单例模式

作用:1、为了保证JVM中的某一个类型的java对象永远只有一个2节省内存开销

分为类加载阶段创建和用到再创建


多态:

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
可以降低代码之间的耦合度
子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口


方法的覆盖中,私有方法无法被覆盖

super关键字(对比上面的this)

用在什么地方:1、用在成员方法中(不能用在静态方法中)2、用在构造方法中

1、不是引用类型,储存的不是内存地址,指向的不是父类对象

2、代表的是当前子类对象的父类型特征

3、什么时候用:子类和父类中都有某个数据,例如:子类和父类都有naem这个属性,

                          如果在子类中访问父类的这个name属性,需要用到super

final关键字

在java中,final的含义在不同的场景下有细微的差别,但总体上来说,它指的是“这是不可变的”

他 修饰的 类无法被继承、方法无法被覆盖、局部变量无法再改变,修饰的引用类型无法再指向其它对象

一般和static联用

https://www.cnblogs.com/dotgua/p/6357951.html


抽象类的定义:class前面加abstract,只能单继承extends


接口:interface 可以多继承

inplements 实现

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

语法格式

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

Object类:中的toString方法就是用来给我们重写的

引用类型中: == 比较的是两边的内存地址 (字符串不能用)

                 :equals( 写法:o1.equals(o2) )比较的是是否一样(key和value)


finalize:一般用于释放资源(该对象马上要被回收了)


hashCode方法:返回的是该对象的哈希码值(对象的内存地址经过哈希算法得到哈希码值


package:为了解决类的命名冲突问题(语句放在.java源文件的第一行 eg:package com.ptt.javase.test01)


访问控制权限:public 缺省 protect private


四个内部类:静态 成员 局部 匿名


类和类之间的关系:泛化 实现 关联 聚合


异常机制:异常(不正常事件)

作用:程序发生异常后,为我们输出详细信息

分类:

处理的两种形式:1、throws  上抛

                           2、try...catch... 捕捉  printStackTrace打印

finally 用于处理异常后需要输出的内容

关于 final finalize finally区分

异常中的 FileNotFoundException

1、拒绝访问 2、系统找不到指定路径

https://blog.csdn.net/Sonny_w/article/details/81112736


数组Array(对比集合)

1、是一种引用类型

2、是一种数据结构,线性结构

3、是一个容器,可以用来储存其他元素,可以储存任意数据类型的元素

4、分为一维数组,二维数组 三维和多维数组

数组中第一个元素下标为0

取数组中最后一个元素表达式:a1[a1.length-1] ,length是数组的长度(表示数组中元素的个数)
数组中元素个数的表达式:a1.length

数组中  sout 直接输出的是内存地址


二维数组:看作分行列的一维数组

初始化方式:1、静态初始化 2、动态初始化 

                              它们在内存中的分布是一样的,知道储存什么数据选1,不知道选2


Scanner类:可以用来获取用户的输入

数组的排序:冒泡 选择 

二分法查找:Arrays工具类


关于常量池

字符串缓冲区:

1、StringBuffer 线程安全的(多线程可用)

2、Stringbuilder 非线程安全的(多线程可能出问题)

和 String最大的区别:String是不可变字符串,存储在常量池中

注意默认值的不同


时间戳是指格林威治时间1970年01月01日00时00分00秒起至当下的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。 在实际应用上, 它可以使用在包括电子商务、 金融活动的各个方面, 尤其可以用来支撑公开密钥基础设施的 “不可否认” 服务。


集合



IO流

字节流

字符流

关于IO流为啥要最后finally关闭
如果不关闭的话,那么这个IO资源就会被他一直占用,这样别人想用就没有办法用了,所以这回造成资源浪费。
你要关闭资源,最好写在finally中,如果这个东东出现一个异常,你就关不掉了。
flush
使用flush()将流数据刷到目标里,这时流还存活着,还可以继续使用该流进行别的操作。
close()虽然也有flush()的效果但是这时流已经死了,你如果想继续使用流的话就必须在此建立流,这样不就很浪费了(而且加flush可以避免特殊情况数据丢失)


类 实现 Seriallizable接口,JVM对他的特殊待遇是什么?

https://blog.csdn.net/heyanfeng22/article/details/90776663


多线程(Thread)

线程指进程中的一个执行场景,也就是执行流程,那么进程和线程的区别是什么?

1、每一个进程是一个应用程序,都有独立的内存空间

2、同一个进程中的线程共享其进程中的内存和资源

     (共享的内存是堆内存和方法区的内存,栈内存不共享,每个线程有自己的)

多线程不是提高执行速度而是提高CPU的使用率

线程是进程中的执行场景,一个进程可以启动多个线程(进程>线程)

作用:多人同时访问百度


反射机制

作用:1、反编译: .class-->.java

          2、通过反射机制访问java类的属性、方法、构造方法等


MySQL主要学习的sql语句

sql语句的分类:

DQL(数据查询语言):查询语句,凡是select语句都是

DML(数据操作语言):insert、delect、update,对表中的数据进行增删改

DDL(数据定义语言):create、drop、alter,对表结构进行增删改

TCL(事务控制语言):commit提交事务,rollback回滚事务,

DCL(数据控制语言):grant授权、revoke撤销权限等


select    5

...

from      1

...

where    2

...

group     3

...

having    4

...

order by   6

...

多表查询


明天的计划:学习深度思考和复习mybatis和spring,然后准备任务二


遇到的困难:


收获:通过任务一的学习,对使用mybatis和spring框架对数据库的增删查改有了一定的掌握,并且通过较大量数据的插入和查找对索引的使用有了更加清晰的感知


经验总结:任务一主要针对的是mysql,JDBC,mybatis和spring框架中较简单的部分的学习

但是在学习这些之前如果没有一定的java基础估计还是不能很好的能驾驭17步以后的内容,所以我建议还是先对java基础有一个大概的了解,然后再学习mysql,JDBC和后面的框架知识,这样能较快的理解并完成后面的内容。












返回列表 返回列表
评论

    分享到