7.17实习培训日志-java基础
总结
今天主要是学习了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 字面量
计算机高级语言用变量管理内存存储的数据。
变量名实际是一个内存栈的地址
作用域
- java用一对大括号作为语句块范围,称为作用域。
 - 作用域变量不能重复定义。
 - 离开作用域,变量所分配的内存空间将会别jvm回收。
 
包装类
- 包装类中有实用的方法和常量。MIN_VALUE,parseInt。
 - 包装类作为集合元素的类型。
 
补码
正数是其本身,负数符号位不变,其他位取反,再加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,正数补0。
 - 整数自动转换成浮点数可能会损失精度(int->float,long->double,精度丢失)。int->double不会丢失精度。
 
大类型到小类型转换[强制转换]
- 注意符号位丢失
 
int和char类型自动转换
获取数据
- String[] args获取数据
 - Scanner 获取数据
 
自增自减自乘自除
- i+=n/i-=n/i*=n/i/=n
 - i++ ++i i-- --i
 
交换a b值
a = a+b
b = a-b
a = a-b
运算符先后顺序
单算移比按逻三赋
- 单目运算符(一元运算符,即一个变量):+,-,++,--
 - 算数运算符:+,-,*,/,%
 - 移位运算符:<<,>>
 - 关系运算符:>,<,>=,<=,==,!=
 - 位运算符:
&,|,~,^, - 逻辑运算符:
&&,|| - 三目运算符:表达式1?表达式2:表达式3;
 - 赋值运算符:=等
 
System.out.println(1+1<<1);//4
短路运算
&& ||
长路运算
&``|
java中int和boolean不自动转换,不能在该用true/false时用int数值。
数组
- 动态初始化
 - 静态初始化(
int a[] = {2,3,4}) 
字符串
- 使用时直接赋值更好
 - 字符串内容不可改变
 
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量
运行速度快慢为:StringBuilder > StringBuffer > String
StringBuilder:线程不安全
StringBuffer:线程安全
java面向对象
方法与类
方法重载
重载:方法名称相同,参数类型和个数不同。
封装继承多态
匿名对象:回收机制
引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
String说:其值不可变,引用可变
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关键字
- 表示类中属性和调用方法
 - 调用本类中构造方法
 - 表示当前对象
 
this()和super()都指的是对象,均不可以在static环境中使用。
从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
static关键字
static块可以用来优化程序性能,只会在类加载的时候执行一次。
static关键字不会影响到变量或者方法的作用域。
final关键字
- 修饰变量(基本数据类型:值不可更改,引用数据类型:指向不可更改)
 - 修饰方法(方法不可被子类覆盖,重写)
 - 修饰类(类不可被继承)
 - 类的private方法会隐式地被指定为final方法。
 
重写
定义:方法名称相同,返回值类型相同,参数相同。
重写限制:被子类重写的方法不能比父类方法有更严格的访问权限。
多态
三大要素:
- 继承
 - 重写
 - 父类引用指向子类对象
 
多态的弊端:不能使用子类特有的成员属性和子类特有的成员方法。
静态方法,静态和类相关,算不上重写,所以会访问父类静态方法,而不是子类静态方法。
泛型
注意事项:
- 泛型的类型参数只能是类类型,不能是简单类型。
 - 不能对确切的泛型类型使用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>声明是一个泛型方法。
静态方法无法访问类上定义的泛型,需要把方法声明在方法上。
泛型上下边界
- 上边界,传入的类型实参必须是指定类型的子类型
 - 下边界,传入的类型实参必须是指定类型的父类型
 - 泛型的上下边界添加,必须与泛型的声明在一起
 
<? 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
软件设计模式
- 工厂模式
 - 抽象工厂模式
 - 单例模式
 - 装饰器模式
 - mvc模式
 - 状态模式
 - 数据访问对象模式
 - 前端控制器模式
 - 拦截过滤器模式
 - 传输对象模式
 
单例模式
单例模式最好用枚举类实现(线程安全,自由序列化,保证单例)
enum类用分号分开枚举实例后,可以声明变量或者成员方法。
enum类默认私有构造方法,且只能由编译器调用。
enum类只能覆盖toString方法,其他都用final修饰。
java 1.7后switch也对字符串进行了支持。
7.17实习培训日志-java基础的更多相关文章
- 7.20实习培训日志-Java基础程序设计结构
		
Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...
 - 7.19实习培训日志- java进阶
		
java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...
 - 7.15实习培训日志 java题解
		
周末总结 本周主要学习了markdown,git,docker等工具的使用.在本周的学习中,初步了解了markdown,git,docker的使用.本周的静态博客部署中,对于怎么显示一个博客内容,有两 ...
 - 7.30实习培训日志-SQL优化
		
总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...
 - 7.24实习培训日志-Docker-Compose
		
Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...
 - 7.10实习培训日志-markdown Git
		
父模块github地址 一. markdown 1. markdown列表 html是一种发布的格式,markdown是一种书写的格式 区块引用 列表 图片 表格 html 标题 记笔记 写博客 2. ...
 - 7.31实习培训日志-docker sql
		
docker mysql docker问题 今天问了老师有关docker的问题,entrypoint和cmd的区别,两者同时存在cmd的执行结果会被当做参数传入entrypoint. dockerfi ...
 - 7.29实习培训日志-Oracle题目
		
总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...
 - 7.27实习培训日志-Oracle SQL(三)
		
Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...
 
随机推荐
- 【BZOJ2626】JZPFAR kd-tree+堆
			
[BZOJ2626]JZPFAR Description 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个( ...
 - Linux系统中的python2.x升级至python3
			
python2.x升级至python3 由于需要在公司测试环境搭建的Jenkins上面运行接口自动化脚本,所以需要对Jenkins所处的服务器的python环境进行升级,以便运行python3编写的脚 ...
 - viewport详解
			
本文主要讲解viewpor相关知识. 参考资料&内容来源 博客园:https://www.cnblogs.com/zaoa/p/8630393.html 博客园:http://www.cnbl ...
 - sqlldr 用法
			
转自:http://blog.chinaunix.net/uid-23622436-id-2394093.html 在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几 ...
 - 【题解】数字组合(NTT+组合 滑稽)
			
[题解]数字组合(NTT+组合 滑稽) 今天实践一下谢总讲的宰牛刀233,滑稽. \((1+x)(1+x)(1+x)\)的\(x^2\)系数就代表了有三个一快钱硬币构成的两块钱的方案数量. 很好理解, ...
 - Grasswire"草根连线":Pinterest图片流+Reddit众包新闻门户
			
移动互联网技术对新闻媒体行业带来的变化是惊人的. 从专业的综合门户到维基.博客.微博.自媒体,新闻越来越散户化,众包化,也更具实时性和社交属性. Grasswire:姑且翻译为"草根连线&q ...
 - [持续集成]Jenkins 自动化部署 Maven 工程
			
一.Jenkins 持续部署原理图 基础服务: 1 SVN 服务 SVN是Subversion的简称,是一个开放源代码的版本控制系统.说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的 ...
 - SAP FI 科目代码
			
资产类 现金 银行存款 其他货币资金 短期投资 短期投资跌价准备 应收票据 应收股利 应收利息 应收账款 其他应收款 坏账准备 预付账款 应收补贴款 物料采购 原材料 包装物 低值易耗品 材料成本差异 ...
 - re.sub用法
			
re.sub功能是对于一个输入的字符串,利用正则表达式,来实现字符串替换处理的功能返回处理后的字符串 re.sub共有五个参数 三个必选参数pattern,repl,string 两个可选参数coun ...
 - Java基础教程:多线程基础(3)——阻塞队列
			
Java基础教程:多线程基础(3)——阻塞队列 快速开始 引入问题 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 模 ...