今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式。晚上主要讲了maven的一些基础知识和idea的一些配置修改,编码修改成utf-8,换行改成'\n'模式,idea的terminal换成git-bash等等,maven package打jar包,生成class文件,maven install 打jar包,放到本地仓库,生成class文件,maven jar只打jar包等等,dependencies和dependencyManament(统一子模块版本)区别等。
16进制表示:0x或0X前缀
十进制转二进制:不断除以2,保留余数,商为0时不再除以2,将所有余数倒序排列。
十进制转十六进制:不断除以16,保留余数,商为0时不再除以16,将所有余数倒序排列。
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虽然定义了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默认整数计算结果为int类型
byte a =1,b =2; byte c = a+b;//compiler error int d = a+b;//okfloat[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?表达式2:表达式3;赋值运算符:=等 System.out.println(1+1<<1);//4&& ||
&``|
java中int和boolean不自动转换,不能在该用true/false时用int数值。
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量
运行速度快慢为:StringBuilder > StringBuffer > String
StringBuilder:线程不安全
StringBuffer:线程安全
重载:方法名称相同,参数类型和个数不同。
封装继承多态
匿名对象:回收机制
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
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 ref2this()和super()都指的是对象,均不可以在static环境中使用。 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
static块可以用来优化程序性能,只会在类加载的时候执行一次。
static关键字不会影响到变量或者方法的作用域。
定义:方法名称相同,返回值类型相同,参数相同。
重写限制:被子类重写的方法不能比父类方法有更严格的访问权限。
三大要素:
继承重写父类引用指向子类对象多态的弊端:不能使用子类特有的成员属性和子类特有的成员方法。
静态方法,静态和类相关,算不上重写,所以会访问父类静态方法,而不是子类静态方法。
注意事项:
泛型的类型参数只能是类类型,不能是简单类型。不能对确切的泛型类型使用instanceof操作。 泛型类:在实例化类的时候指明泛型的具体类型泛型方法:在调用方法的时候指明泛型的具体类型 Gen<Integer> g = new Gen<>(); System.out.println(g instanceof Gen); // true System.out.println(g instanceof Gen<Integer>); //compiler error抽象类访问修饰符:public和protected
接口访问修饰符:public
返回值前面的<T>声明是一个泛型方法。
静态方法无法访问类上定义的泛型,需要把方法声明在方法上。
不能创建一个确切的泛型类型的数组
List<String>[] ls = new ArrayList<String>[10]; //error List<?>[] ls = new ArrayList<?>[10]; //ok List<String>[] ls = new ArrayList[10]; //okjava 泛型详解
单例模式最好用枚举类实现(线程安全,自由序列化,保证单例)
enum类用分号分开枚举实例后,可以声明变量或者成员方法。
enum类默认私有构造方法,且只能由编译器调用。
enum类只能覆盖toString方法,其他都用final修饰。
java 1.7后switch也对字符串进行了支持。
深入理解Java枚举类型(enum)
转载于:https://www.cnblogs.com/sufferingStriver/p/9332313.html
相关资源:数据结构—成绩单生成器