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 ...
随机推荐
- python循环导入的解决方案
解决循环import的方法主要有几种: 1.延迟导入(lazy import) 即把import语句写在方法或函数里面,将它的作用域限制在局部. 这种方法的缺点就是会有性能问题. 2. ...
- PCA tries to preserve linear structure, MDS tries to preserve global geometry, and t-SNE tries to preserve topology (neighborhood structure)
https://colah.github.io/posts/2014-10-Visualizing-MNIST/
- sqlldr 用法
转自:http://blog.chinaunix.net/uid-23622436-id-2394093.html 在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几 ...
- linux c编程:文件的操作
在Linux系统中,系统是通过inode来获得这个文件的信息.在Linux系统中,inode的信息都是封装在stat这个结构体中.可以通过man 2 stat来查看stat的具体结构.从中可以看到包含 ...
- 搭建vps***
快速搭建ShadowSocks wget --no-check-certificate -O shadowsocks.sh https://raw.githubusercontent.com/tedd ...
- Java for LeetCode 091 Decode Ways
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- LeetCode:奇偶链表【328】
LeetCode:奇偶链表[328] 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地 ...
- idea生成可执行jar
1.创建工程 ①使用idea新建一个maven工程. ②编辑工具逻辑代码 ③完成代码的编写后添加工具调用的main方法以接收参数 至此代码编辑过程已经基本完成 ④在maven管理依赖的时候使用idea ...
- iOS 分享功能开发
iOS 开发过程中可能会遇到需要进行第三方分享的需求,比如向QQ,微信,微博等分享 如下图 我们今天要讲到的方式是使用了一个第三方工具: http://www.sharesdk.cn 一,注册账号 去 ...
- PYTHON 爬虫笔记六:PyQuery库基础用法
知识点一:PyQuery库详解及其基本使用 初始化 字符串初始化 html = ''' <div> <ul> <li class="item-0"&g ...