总结

今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式。晚上主要讲了maven的一些基础知识和idea的一些配置修改,编码修改成utf-8,换行改成'\n'模式,idea的terminal换成git-bash等等,maven package打jar包,生成class文件,maven install 打jar包,放到本地仓库,生成class文件,maven jar只打jar包等等,dependencies和dependencyManament(统一子模块版本)区别等。

Java基础

计算机进制转换

进制表示

16进制表示:0x或0X前缀

进制转换

十进制转二进制:不断除以2,保留余数,商为0时不再除以2,将所有余数倒序排列。

十进制转十六进制:不断除以16,保留余数,商为0时不再除以16,将所有余数倒序排列。

变量与数据类型

数据类型

八种基本数据类型

类型 占用空间(字节)
byte 1
short 2
int 4
long 8
float 4
double 8
char 2
boolean 1或4

Unicode/GBK/gb2312/gb18030: 中文2字节

UTF-8: 中文3字节

因为Java编译器默认使用Unicode编码。所以char在Java中占用2字节。

char a= (char) Integer.MAX_VALUE;
System.out.println((int)a);
char b= (char) Integer.MIN_VALUE;
System.out.println((int)b);
运行结果为65535 0
《Java虚拟机规范》

虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位

字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)

引用数据类型

对象、数组、接口

JAVA中数组也是对象,基本类型数组是一个由JVM创建的对象,其他数组是类,也是对象。

引用类型:引用类型继承于Object,都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;

基本类型只在栈中

引用类型引用在栈中数据在堆中

自定义数据类型

类就是数据类型,自定义类是一种自定义数据类型

变量

基本概念

字面量是指由字母,数字等构成的字符串或者数值,它只能作为右值出现,所谓右值是指等号右边的值

int a;//a 变量
final int b = 10;//b 常量 10 字面量

计算机高级语言用变量管理内存存储的数据。

变量名实际是一个内存栈的地址

作用域

  1. java用一对大括号作为语句块范围,称为作用域。
  2. 作用域变量不能重复定义。
  3. 离开作用域,变量所分配的内存空间将会别jvm回收。

包装类

  1. 包装类中有实用的方法和常量。MIN_VALUE,parseInt。
  2. 包装类作为集合元素的类型。

补码

正数是其本身,负数符号位不变,其他位取反,再加1.

两数相加,符号位有进位,进位被舍弃。

补码好处最大好处:变减法为加法。

模:某钟类型数据的总和。

正数加负数=模

整数类型

java默认整数计算结果为int类型

byte a =1,b =2;
byte c = a+b;//compiler error
int d = a+b;//ok

浮点类型

类型 指数位 尾数位
float 8 23
double 11 52
int 0 31
long 0 63

float[double]存储数据范围大于int[long]类型,但精度比int[long]小(int:31位,float:23位)

在做数值运算中,尽量用整数运算,浮点数有误差。

double d = 2.7;
double result = d-2;
//0.7000000000000002
System.out.println(result);

注意浮点数比较不要用==。

字符类型

ASCII码对应:1:48,A:65,a:97

转义符

转义符:\

\u4e2d表示Unicode码的'中'

类型转换

小类型到大类型转换[自动转换]
  1. 符号位自动扩展,负数补1,正数补0。
  2. 整数自动转换成浮点数可能会损失精度(int->float,long->double,精度丢失)。int->double不会丢失精度。
大类型到小类型转换[强制转换]
  1. 注意符号位丢失
int和char类型自动转换

获取数据

  1. String[] args获取数据
  2. Scanner 获取数据

自增自减自乘自除

  1. i+=n/i-=n/i*=n/i/=n
  2. i++ ++i i-- --i

交换a b值

a = a+b
b = a-b
a = a-b

运算符先后顺序

单算移比按逻三赋

  1. 单目运算符(一元运算符,即一个变量):+,-,++,--
  2. 算数运算符:+,-,*,/,%
  3. 移位运算符:<<,>>
  4. 关系运算符:>,<,>=,<=,==,!=
  5. 位运算符:&,|,~,^,
  6. 逻辑运算符:&&,||
  7. 三目运算符:表达式1?表达式2:表达式3;
  8. 赋值运算符:=等
System.out.println(1+1<<1);//4

短路运算

&& ||

长路运算

&``|

java中int和boolean不自动转换,不能在该用true/false时用int数值。

数组

  1. 动态初始化
  2. 静态初始化(int a[] = {2,3,4})

字符串

  1. 使用时直接赋值更好
  2. 字符串内容不可改变

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量

运行速度快慢为:StringBuilder > StringBuffer > String

StringBuilder:线程不安全

StringBuffer:线程安全

java面向对象

方法与类

方法重载

重载:方法名称相同,参数类型和个数不同。

封装继承多态

匿名对象:回收机制

引用传递

值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

String说:其值不可变,引用可变

Java中只有按值传递,没有按引用传递!

JAVA中只有值传递,基本类型传递的是值的副本,引用类型传递(不是上面说的引用传递)的是引用的副本

值传递和引用传递(不是引用类型的传递)的区别

public static void main(String[] args) {
String str1 = "hello";
change(str1);
System.out.println(str1);
}
static void change(String str2){
str2 = "yes";
}
结果:hello(String 不可改变)
class Ref{
String str = "ref";
}
public class Main {
public static void main(String[] args) {
Ref r = new Ref();
System.out.println(r.str);
r.str="ref1";
System.out.println(r.str);
change(r);
System.out.println(r.str);
}
static void change(Ref r){
r.str="ref2";
}
}
结果为
ref
ref1
ref2

this关键字

  1. 表示类中属性和调用方法
  2. 调用本类中构造方法
  3. 表示当前对象

this()和super()都指的是对象,均不可以在static环境中使用。

从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

static关键字

static块可以用来优化程序性能,只会在类加载的时候执行一次。

static关键字不会影响到变量或者方法的作用域。

final关键字

  1. 修饰变量(基本数据类型:值不可更改,引用数据类型:指向不可更改)
  2. 修饰方法(方法不可被子类覆盖,重写)
  3. 修饰类(类不可被继承)
  4. 类的private方法会隐式地被指定为final方法。

重写

定义:方法名称相同,返回值类型相同,参数相同。

重写限制:被子类重写的方法不能比父类方法有更严格的访问权限。

多态

三大要素:

  1. 继承
  2. 重写
  3. 父类引用指向子类对象

多态的弊端:不能使用子类特有的成员属性和子类特有的成员方法。

静态方法,静态和类相关,算不上重写,所以会访问父类静态方法,而不是子类静态方法。

泛型

注意事项:

  1. 泛型的类型参数只能是类类型,不能是简单类型。
  2. 不能对确切的泛型类型使用instanceof操作。
  • 泛型类:在实例化类的时候指明泛型的具体类型
  • 泛型方法:在调用方法的时候指明泛型的具体类型
Gen<Integer> g = new Gen<>();
System.out.println(g instanceof Gen); // true
System.out.println(g instanceof Gen<Integer>); //compiler error

构造方法使用泛型

public class GenericTest<T> {
public T t;
public GenericTest(T t){
this.t = t;
}
}

设置多个泛型

class Gen<K,T>{
private K k;
private T t;
}

通配符

class Info<T>{
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
public class GenericTest<T> {
public static void main(String[] args) {
Info<String> i = new Info<>();
i.setValue("value");
tell(i);
}
public static void tell(Info<?> i){
System.out.println(i.getValue());
}
}

泛型接口

抽象类访问修饰符:public和protected

接口访问修饰符:public

泛型方法

public <T> T method(T t)

返回值前面的<T>声明是一个泛型方法。

静态方法无法访问类上定义的泛型,需要把方法声明在方法上。

泛型上下边界

  1. 上边界,传入的类型实参必须是指定类型的子类型
  2. 下边界,传入的类型实参必须是指定类型的父类型
  3. 泛型的上下边界添加,必须与泛型的声明在一起
<? extends Number>
public int compareMobEntity(Comparator<? super EntityMob> comparator)

泛型数组

不能创建一个确切的泛型类型的数组

List<String>[] ls = new ArrayList<String>[10];  //error
List<?>[] ls = new ArrayList<?>[10]; //ok
List<String>[] ls = new ArrayList[10]; //ok

java 泛型详解

软件设计模式

  1. 工厂模式
  2. 抽象工厂模式
  3. 单例模式
  4. 装饰器模式
  5. mvc模式
  6. 状态模式
  7. 数据访问对象模式
  8. 前端控制器模式
  9. 拦截过滤器模式
  10. 传输对象模式

单例模式

单例模式最好用枚举类实现(线程安全,自由序列化,保证单例)

enum类用分号分开枚举实例后,可以声明变量或者成员方法。

enum类默认私有构造方法,且只能由编译器调用。

enum类只能覆盖toString方法,其他都用final修饰。

java 1.7后switch也对字符串进行了支持。

深入理解Java枚举类型(enum)

7.17实习培训日志-java基础的更多相关文章

  1. 7.20实习培训日志-Java基础程序设计结构

    Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...

  2. 7.19实习培训日志- java进阶

    java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...

  3. 7.15实习培训日志 java题解

    周末总结 本周主要学习了markdown,git,docker等工具的使用.在本周的学习中,初步了解了markdown,git,docker的使用.本周的静态博客部署中,对于怎么显示一个博客内容,有两 ...

  4. 7.30实习培训日志-SQL优化

    总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...

  5. 7.24实习培训日志-Docker-Compose

    Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...

  6. 7.10实习培训日志-markdown Git

    父模块github地址 一. markdown 1. markdown列表 html是一种发布的格式,markdown是一种书写的格式 区块引用 列表 图片 表格 html 标题 记笔记 写博客 2. ...

  7. 7.31实习培训日志-docker sql

    docker mysql docker问题 今天问了老师有关docker的问题,entrypoint和cmd的区别,两者同时存在cmd的执行结果会被当做参数传入entrypoint. dockerfi ...

  8. 7.29实习培训日志-Oracle题目

    总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...

  9. 7.27实习培训日志-Oracle SQL(三)

    Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...

随机推荐

  1. 【BZOJ2626】JZPFAR kd-tree+堆

    [BZOJ2626]JZPFAR Description 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个( ...

  2. Linux系统中的python2.x升级至python3

    python2.x升级至python3 由于需要在公司测试环境搭建的Jenkins上面运行接口自动化脚本,所以需要对Jenkins所处的服务器的python环境进行升级,以便运行python3编写的脚 ...

  3. viewport详解

    本文主要讲解viewpor相关知识. 参考资料&内容来源 博客园:https://www.cnblogs.com/zaoa/p/8630393.html 博客园:http://www.cnbl ...

  4. sqlldr 用法

    转自:http://blog.chinaunix.net/uid-23622436-id-2394093.html 在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几 ...

  5. 【题解】数字组合(NTT+组合 滑稽)

    [题解]数字组合(NTT+组合 滑稽) 今天实践一下谢总讲的宰牛刀233,滑稽. \((1+x)(1+x)(1+x)\)的\(x^2\)系数就代表了有三个一快钱硬币构成的两块钱的方案数量. 很好理解, ...

  6. Grasswire&quot;草根连线&quot;:Pinterest图片流+Reddit众包新闻门户

    移动互联网技术对新闻媒体行业带来的变化是惊人的. 从专业的综合门户到维基.博客.微博.自媒体,新闻越来越散户化,众包化,也更具实时性和社交属性. Grasswire:姑且翻译为"草根连线&q ...

  7. [持续集成]Jenkins 自动化部署 Maven 工程

    一.Jenkins 持续部署原理图 基础服务: 1 SVN 服务 SVN是Subversion的简称,是一个开放源代码的版本控制系统.说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的 ...

  8. SAP FI 科目代码

    资产类 现金 银行存款 其他货币资金 短期投资 短期投资跌价准备 应收票据 应收股利 应收利息 应收账款 其他应收款 坏账准备 预付账款 应收补贴款 物料采购 原材料 包装物 低值易耗品 材料成本差异 ...

  9. re.sub用法

    re.sub功能是对于一个输入的字符串,利用正则表达式,来实现字符串替换处理的功能返回处理后的字符串 re.sub共有五个参数 三个必选参数pattern,repl,string 两个可选参数coun ...

  10. Java基础教程:多线程基础(3)——阻塞队列

    Java基础教程:多线程基础(3)——阻塞队列 快速开始 引入问题 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 模 ...