JAVA基础 框架笔记

1.一般情况下,java源文件名与类名相同,如果类名与源文件名不相同,javac编译时,跟的事源文件名(javac *.java),生成的字节码文件(*.class)与类名相同

2.公共类源文件名必须与类名相同

3.final常亮(不可变数据)定义名称每个字母都大写,不能自增自建

4.单行注释 "//" 多行注释 "/* */" javadoc 是生成java注释,(javadoc -d ./doc *.java存储注释,打开index.html)必须是public类,public/protected方法和变量,可以用html编译(<p><br>),带参数的的方法要用@param注释

5.JRE JAVA Runtime Enviroment java运行环境,包含JVM 和基本类库

6.JVM java Vitual Machine java虚拟机,包含JIT(即时编译器)可以把字节码文件翻译成机器指令,不同平台安装不同版本JVM,可以跨平台

7.java基础类库:java原有的类库

8.Byte字节=8个bit二进制位(16G=16*1024MByte) 1024=2的10次方

9.tomcat服务器默认编码格式是ISO-8859-1

10.GBK/GBK2312 中文编码,每个汉字对应2个字节

11.Unicode全球编码,包含utf-8 可变字节,数字英文占1个字节,一个汉字对应3个字节,日韩文可能占4-5个字节,utf-16 不可变字节,一个汉字和英文都对应2个字节

12.10进制转2进制 对2取余,倒序输出0x,8,16进制同理

13.2进制转10机制 00001010 0+1*2的1次方+0的2次方+1的3次方=10

14.负数是原码最高位变1,之后最高位不变其余的反码的补码(+1),计算机是以补码来计算

15.‘’不是字符,字符是单引号引起来的单个字符

16.""字符串可以是空值 不等于null

17.变量必须先赋值再使用

18.在类中定义的变量叫成员变量,在代码块中定义的变量叫局部变量

19.同一作用域中部能定义重名的变量

20.静态方法不能直接使用非静态成员,可以先new 这个类再使用类中成员变量

21.数据类型分为基本类型和引用类型两大类

22.基本类型数据都放栈内存,栈中的数据可以共享,引用类型(数组,对象)存放堆内存并又垃圾回收机器人管理,没有被引用的对象会在不定时被垃圾回收,所以java比较占内存

23.byte/short/char 这三种数据类型在进行运算之前,会先把自己提升为int再运算

24.大类型数据不能直接赋值给小类型数据(BYTE=INT是不对的),字面量数据默认int类型

25.在把int赋值给long类型时,隐含着一个自动类型转换,建议在int字面量后加上字符L(l),省去了自动类型转换这一步

26.float 4字节 总字面量精度7个(12345.67) double 8字节 总字面量精度15个 ,小数默认double类型,float需要在小数字面量后加F(f)

27.小数在计算机中采用近似值保存,不准确(2-1.1=0.899999),一般情况小数不直接判断是否与另一个小数相等

27.char类型采用utf-16,每个字符占2个字节

28.字符类型实际上储存的事这个字符对应的码值:'A' 65,'a' 97,'0' 48,回车 13,换行 10

29.因为字符存储的事码值,直接可以把一个整数赋值给字符类型变量(0-65535)

30.转义字符: \t Tab,\n 换行,\\ \,\' ',\" ",不能单独用“\”

31.boolean只能赋值t or f,不能0or1,并且不能和其他类型进行转换

32.自动转换可能精度丢失(比如int转float)

33.小数转整数,舍弃小数部分

34.大整数类型强转小整数类型,只把最后一个字节(short 最后2个字节)的数存到变量中(iint i=270,byte b=(byte)ii,bb=14(256+14))

35.整数可以强转字符

36.面试题:是否存在一个整数x,使得x+1<x成立? 存在(2147483647),整数超范围溢出

37.int相除,只保留整数,舍弃小数部分,除数不能为0,可以除0.0,无穷大,-0.0,-无穷大,0(-0)除以0.0,NaN

38.余数的符号与被除数符号一致

39. 前缀(++i)自变量先自增再运算,后缀(i++)自变量先运算再自增

40.自增自减/复合赋值都隐含着强制类型转换(byte b=10; b=b+1 不可以,b++/b+=5 是可以的)

41.java把内存分为栈区,堆区,方法区(方法区中有常量区)三块

42.Str1="abc" str2="abc" str3="ab"+"c" str4=new String("abc")

str1=str2=str3 <>str4(常量区中可以共享一样字符串的地址,new会在堆中分配一个储存空间再去常量区查找值,所以地址不同,“==”比较的是字符串内容的地址)

43.42.Str1="abc" str2="abc" str3="ab"+"c" str4=new String("abc")

str1.equals(str2).equals(str3).equals(str4)都是true(.equals比较的是字符串内容的值)

44.^异或(当左右2边不一样时为true,否则为false)

45.基本类型转换字符串(str=123 可以写成 str="" +123)

46.面试题:如何实现两个数的原地交换?

方法1:x=x+y;y=x-y;x=x-y;

方法2:x=x^y;y=x^y;x=x^y;

实际应用中,建议使用 int temp=x;x=y;y=temp;

47.Scanner 不能直接读取1个字符(char),但可以先以字符串读取,再调用String.charAt(0)读取第0个字符

48.System.currentTimeMillis 计算当前时间,返回1970-1-1午夜到现在的毫秒(世界协调时,晚8小时时差)

49.return 结束当前方法的执行

50.switch case default break没有先后顺序,switch表达式只能为int(short、byte、char)、String、枚举类型(不需要default),case后只能放常量(char可以放1个字符),不能重复,没有break,case穿透

51.枚举类型 enum,获取枚举里的值用枚举类型变量名.值,是一个类,有.class字节码文件

52.直接可以在代码中使用的类不用导包是因为这个类在JAVA.LANG包里

53.continue 结束本次循环,继续下次循环

54.字符串倒序排列:个位 num%10,十位num/10%10,百位num/10/10%10.......

获得字符串是str=str+余数,获得整数是int=int*10+余数

55.求第二高数的思路,第二高为之前第一高,业务逻辑先设定第二高,再设定第一高

56.求质数思路,判断这个数能不能被2-这个数-1整除,可以就是false不是质数

57:中断标签,名字随便取,break/continue加":"

58.数组初始化默认:int =0;String=null;boolean=false;char=0的字符

59.foreach 循环数组,只能读取数组元素,不能改变数组元素

60.数组逆序排列:首位互换,依次类推,for(int i=0;i<arr.length/2;i++) int t=arr[i];arr[i]=arr[arr.length-1-i];arr[arr.length-1-i]=t

61.eclipse ctrl+F11 快速运行

62.设置代码提示:window-preference-java-editor-contentAsistent在.后面输入a-z

63.如果复制过来的.java文件编码不一致,找到文件编辑txt,另存为utf-8 .java格式,再复制黏贴进esclipse的类中,直接打开不能运行

64.导入电脑上已经存在的项目到esclipse中:import-java-existing projects into workspace

65.包名格式:公司域名的倒叙.项目名.模块名

66.如果一个类定义在包中,这个类的完整类名就变为:包名.类名

67.完全数:可以被1和整除商的和(1,28,496,8128,130816,2096128,33550336)

68.debug:step F5 转到方法内部执行

step F7 从方法中返回

step over F6 执行下一条语句

Resume F8 执行到下一个断点

69.ctrl+shift——F

70.栈区分为方法栈和数据栈,在方法栈中定义的局部变量,可以看作是方法栈中分配的存储空间

71.在定义方法时,指定的参数称形式参数,给方法传递的参数为实际参数

72.方法重载:方法名相同,参数类型或个数不同

73.递归先找规律再确定结束条件

74.重命名:alt+shift+R

75.ctrl+1 快速修复

76.面向过程是以解决问题的步骤为核心,各个步骤之间都是紧密相关的

77.面向对象是以事物为中心,通过给对象发送消息解决问题

78.new是一个运算符,会在堆区中分配一块存储空间,把这块存储空间的起始地址赋值给变量

79.在不同包中能定义重名的类,在同包中不能定义重名的类

80.通过类定义了对象,如果不给对象的各个变量赋值,对象的各个成员变量默认赋值

String null ,int 0,double 0.0 , boolean false

81.构造代码块在每次NEW 之前执行,成员变量赋值其实是在构造方法体前面先执行,构造代码块和成员变量赋值哪个在前先处理哪个

82.快捷键:alt shift s 打开sourse

83.方法的形参与字段名相同,在方法体中采用就近原则,使用的是形参,或者用this.关键字来访问字段

84.在构造方法中this指的是new出来的对象,在实例方法中this指的是调用这个方法的类

85.this() 方法调用构造方法必须作为构造方法的第一条语句

86.形参参数是个类的话,如果在方法体中这个类new了,那么调用的实参和这个形参没有任何关系,所以要用this.类

87.面向对象三个特点:封装 继承 多态

88.is not visible一般是字段被私有化了,没权限使用

89.静态变量属于整个类,共享,存储在方法区,所有对象都可以访问到他

90.静态变量生成于类的创建,到这个运行结束,可以直接用类名.静态变量使用

91.静态方法只能直接使用静态成员,不能直接使用非静态成员,在实例方法可以使用静态成员,一般在定义工具类使用静态方法

92.静态构造方法不能创造,因为构造方法时在类创造时给对象赋值,而静态是和对象无关的

93.静态构造代码块只执行一次

94.静态内部类中不能直接使用外部类的非静态成员,可以使用外部类的静态成员

95.单利分为饿汉式和懒汉式设计模式,懒汉模式为了防止多线程,要在方法前加synchronized同步锁

96.虽然通过子类名或子类对象能访问到父类的静态成员和方法,但这不是继承(子类构造代码块中无执行)

97.构造方法不能被继承,父类如果没有无参构造方法,系统会报错,子类构造方法创建前,先创造父类构造方法

98.super()必须作为子类构造方法的第一条语句,在子类构造方法中,不能同时出现this()和super(),因为她们都必须作为第一条语句存在

99.重写规则:

1-子类方法的签名(方法名和方法参数列表)必须和父类方法签名一致

2-如果方法的返回值类型不是引用类型,子类方法的返回值类型必须和父类的一致

   如果方法的返回值类型时引用类型,子类方法的返回值类型可以是父类方法返回值类型的子类

3-子类方法的访问权限可以大于或等于父类方法的访问权限

父类public 子类只能使用public

父类protected 子类可以protected/public

父类default 如果子类和父类在同包中,子类方法可以default/protected/public

父类default 如果子类和父类不在同包中,子类不能重写

父类private,子类不能重写

4-如果父类有异常抛出,子类重写的方法可以抛出父类异常或者父类异常的子异常

100.可以使用@Override来验证重写是否正确

101.克隆就是对象的深复制,在堆中

102.把对象转换字符串:String.valueOf(obj);

103.哈希码是10进制的

104.子类的toString()方法建议重写,并把类名改为this.getClass.getSimpleName能被继承

105.多态的四个条件:

 1-继承

2-子类重写父类方法

3-让父类引用指向子类对象

4-通过父类引用调用被重写方法

所以子类实例变量不存在多态的问题,如果父类引用指向子类对象,但有和父类重名的变量,是指向父类的成员变量,不是子类的

106.抽象类不能实例化对象,但可以引用指向子类对象(向上造型)

107.抽象类中不一定有抽象方法

108.有抽象方法必须是抽象类

109.接口只有4个内容:

 1-抽象方法

 2-静态方法

3-Static final 常亮

4-default 方法

类实现了接口必须重写接口的所有抽象方法


110.接口中方法默认使用public abstract,不能加protect 和private

111.接口不仅可以继承,还可以实现多继承

112.在成员内部类中不能定义静态方法和静态成员变量


113.静态内部类中不能访问外部类成员变量和方法,和对象没有关系,可以访问静态变量

114.匿名内部类一般用于实例化抽象类和接口,可以重写外部类的抽象和实力方法

115.StringBuilder 线程不安全效率高  StringBuffer 线程安全效率低

116.StringBuilder 构造器默认存储16个字符,超过这个容量就16*2+2,
初始构造器可以在()里写字符串和字符串长度
117.append() 添加true 等于字符串后面拼加 true
118.append() 因为返回this,所以形成方法链,可以连写

119.//冒泡排序
public static void sort(int[] array){
		for(int i=0;i<array.length;i++){
			for(int j=0;j<array.length-1-i;j++){
				if(array[j]>array[j+1]){
					int temp=array[j];
					array[j]=array[j+1];
					array[j+1]=temp;

120.使用数组二分查找必须先把数组排序,速度快,最少一次,最多15次
121.Integer中自动封装int,但是[-128,127]中的数还是int类型,所以==是true,超出是false,为提高效率
122.DateFormat 是抽象类不能实例化,只能new SimpleDateFormat("yyyy年-MM月-dd日")
SimpleDateFormat 字母模式
字母 	日期或时间元素 	表示 	示例
G 	Era 标志符 	Text 	AD
y 	年 	Year 	1996;   96
M 	年中的月份 	Month 	July; Jul; 07
w 	年中的周数 	Number 	27
W 	月份中的周数 	Number 	2
D 	年中的天数 	Number 	189
d 	月份中的天数 	Number 	10
F 	月份中的星期 	Number 	2
E 	星期中的天数 	Text 	Tuesday; Tue
a 	Am/pm 标记 	Text 	PM
H 	一天中的小时数(0-23) 	Number 	0
k 	一天中的小时数(1-24) 	Number 	24
K 	am/pm 中的小时数(0-11) 	Number 	0
h 	am/pm 中的小时数(1-12) 	Number 	12
m 	小时中的分钟数 	Number 	30
s 	分钟中的秒数 	Number 	55
S 	毫秒数 	Number 	978
z 	时区 	General time zone 	Pacific Standard Time; PST; GMT-08:00
Z 	时区 	RFC 822 time zone 	-0800

123.Calendar是抽象类,只能new GregorianCalendar来实现类
124.GregorianCalendar月份1月从0开始,星期从周日开始算1
125.File 构造器可以用绝对路径,目录,目录对象加路径
126.异常分为checked 和unchecked,checked需要手动处理,编译不通过
127.catch顺序是异常类子类放前面,父类放后面
128.try catch finally return 顺序,finally一般不要加return ,会覆盖try catch的return

129.try catch finally return顺序
130.子类异常重写不能等级超过父类的异常,而且必须和父类在同类(Exception/RunTimeException)
131.引用类型4个字节
132.<<左移一位相当于乘以2,>>右移一位相当于除以2,>>>无符号位移,空位以0补齐
133.set 无序 不重复,list 有序 可重复
134.vector 底层也是数组实现,另外是线程安全的,效率低 ArrayList 和LinkedList 线程不安全 效率高
135.LinkList 分为单向和双向,双向第一个没头,最后一个没尾
136.HashMap 线程不安全效率高 HashTable 相反
137.Map Key不能重复,底层是数组+链表
138.HashCode相同但equals不一定相同,equals相同则HashCode肯定相同
139.for遍历list可以先判断这个数是否小于size的一半,小于就i++,大于就i--,在遍历就快很多
140.set的底层是map
,所以set的值是不能重复的,另外也是无序的,所以没有get方法,必须使用iterator来遍历
141.对象就是封装和处理数据
142.javabean就是只有属性和get set方法的简单实体类,也叫po类
143.泛型不能使用在静态属性上,指定的类型不能是基本类型
144.泛型在接口不能用在全局常量上,只能用在方法上
145.子类中使用父类的属性按照父类定,子类新增方法按子类定
146.泛型没有多态,可以在申明引用时用"?"
147.泛型没有数组
148.自定义比较 实现comparator抽象类,并重写compare方法
149.字节流是二进制,可以处理一切,inputStream/outputStream

字符流是文本,只能处理纯文本, read FileRead/write FileWrite
      处理流,增加性能,在节点流之上
 转换流,只能处理字节流,处理解码编码问题 2进制--字符 输入流为解码,字符--2进制 输出流为编码 inputStreamRead/outputStreamWriter150.输入流是反序列化 输出流是序列化 :objectInputStream/objectOutputStream,必须先序列化然后反序列化,不是所有对象都可以序列化,必须是写 java.io.serializable接口,是一个空接口,不需要序列化的在属性前加transient
151.System.out.print是用了print处理流,可以写成printStream ps=System.out ps.println();
152.类与类关系:依赖(方法)、关联(属性)、继承、实现
153.线程有合并线程join,暂停线程yield(静态方法,在哪个线程调用就暂停哪个线程),休眠线程sleep(静态方
法,保留锁)
154.线程优先级代表的是概率,不是绝对的顺序优先级
155.线程wait notify必须要先同步才能使用
156.在同一协议下,端口号不能重复,1024以下端口建议不用

157.JDBC mySql Driver: Class.forName("com.mysql.jdbc.driver")

158.JDBCDreiverManager:DriverManager.getConnection(),返回一个Connection对象

159.通过Connection对象获得Statement对象:con.creatStatement(),除了大批量,否则不建议,因为sql注入
160.通过Connection对象获得PrepareStatement对象:con.PrepareStatement(sql),建议使用,可以使用?占位符
161.PrepareStatement的Date是java.sql.Date
162.ResultSet一般使用While(rs.next){rs.getInt(1)...}
163.最后所有connection,prepareStatement,ResultSet都要关闭

164.增删改是DML语句
165.Create table是DDL语句
166.事务起始于DML语句,结束语Commit/Rollback语句或DDL/DCL语句或断开con

167.事务四大特性:原子性,一致性,隔离性,持久性

Spring
168.Spring是一站式框架:Web层:Spring MVC ,Service层:Spring ioc,dao层:Spring jdbcTamplate
169.Spring底层原理:xml配置文件,dom4j解析xml,工厂模式,反射
170.倒包要在web-inf的lib文件下,核心配置建议放在src文件下,名字建议ApplicationContext.xml
171.配置文件先复制引入beans约束代码
172.加载ApplicationContext ac=new ClassPathXmlApplicationContext(“bean.xml”) xml配置对象
173.单例就是同一个哈希地址
174.配置文件可以用bean标签 下的Construct-arg 标签注入有参构造的属性值,也可以用property value标签注入set方法的属性值,如果是注入对象可以用property ref标签

175.p名称空间注入:再约束里赋值xmlns标签,然后xmlns后面加:p,最后的bean改成p,然后在bean标签里直接加p:属性名=“”就可以

176.数组和list注入:在property标签下加list标签再加value标签
177.map注入:在property标签下加map标签再加entry标签再entry标签,里面写key和value
178.properties注入:在property标签下props标签,再加prop标签里面写key,外面写值
179.注释注入也要有新的约束,开启注释扫描(扫描类,方法,属性):context:compenent-scan 标签,base-package里面多个包可以加,或者只写包前缀
180.context:annotation-config 只能扫描属性注释,不建议用 
181.在类中注释:@compenent(value=“str”) ,value相当于bean里的id
182.注释有4个:@compenent @Controller web层,@service 业务层,@repository 持久层
183.注释单多实例:类上加@scope(value=“prototype”),多实例
184.使用注释注入类属性值的话不需要创建set方法,直接在属性上面用注释实现:@AutoWired或@Resource(name=“str”),name指定的就是@compentent类的value值
185.AOP中的joinpoint连接点就是一个类中那些可以被增强的方法
186.AOP中的pointcut切入点就是实际上被增强的方法
187.AOP中的advance增强就是被增加增强的逻辑,分为5部分:前置,后置,异常,最终,环绕
188.AOP中的aspect切面就是把增强应用到具体的方法上,这个过程叫切面
189.AOP用aspectj框架来实现,有2种方式:xml配置和注解
190.表达式1:execution(访问修饰符 被增强类全路径.方法名(..)) 访问修饰符一般用*代表所有类型,类要全路径,也可以用*代表所有类,..代表所有参数,方法名也可以用*代表所有方法
191.配置1:先配置类的2个bean,2:配置aop:config标签,先配置切入点-aop:pointcut 中express=”execution(表达式)”标签,再配置切面-aop:aspect 标签 中ref=“增强类的id”,然后再加aop:before等配置增强类型,里面method=“增强的方法名”,再加pointcut-ref=“原切入点方法的id”
192.环绕加强在参数里需要加proceedjoinpoint引用,proceedjoinpoint.proceed()可以调用被增强的方法
193.log4j用来查看框架中的日志,log4j的properties文件复制到src目录下
Spring整合web项目

194.在web.xml指定spring位置:<context-param>
                                                    <param-name>ContextConfigLocation</param-name>
                                                    <param-value>classpath:bean.xml</param-value>
                                                </context-param> 

195.在web.xml配置监听器,绿色固定,需要先倒包ContextLoaderListener.jar:

        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
        </listener>

196.AOP注释 先开启AOP操作:<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
197.在增强类前写@Aspect,在增强方法前写@before/AfterReturning/Around/AfterThrowing(value="execution(表达式)")
198.AOP注释也是通过表达式execution()来表示
199.jdbcTemplate应用在spring 的dao层,从new DriverManagerDataSource 对象获取数据库对象,
200.jdbcTemplate如果要查询,需要自己封装
201.jdbcTemplate.queryForObject(sql,new rowMapper,obj..)查询记录一条记录,需要自己重新实现rowMapper接口,实现2个方面:获得ResultSet中的值,并把值封装进一个对象,返回该对象
202.jdbcTemplate查询所有记录使用jt.query(sql,rowmapper,obj)
203.service注入dao注入jdbcTemplate注入dataSource
204.Spring事务管理api中PlatformTransactionManager接口的实现类:org.springframework.jdbc.datasource.DataSourceTransactionManager
205.事务管理先要有约束,然后配置事务,<bean id="" class="org.springframework.jdbc.datarsource.DataSourceTransactionManager>在bean里面注入dataSource
206.事务的增强配置:<tx:advice id="" transaction-manager="事务配置的id"> 然后<tx:attributes> 然后<tx:method name="service里的方法名,方法名部分可以用*代替">
207.切面和AOP基本一样:<aop:config> <aop:pointcut expression="" id=""> <aop:advisor advice-ref="" pointcut-ref="">

208.用注解完成事务:
           1,配置事务管理器 <bean id="" class="org.springframework.jdbc.datarsource.DataSourceTransactionManager>
           2,开启注解事务 <tx:annotation-driven transaction-manager="事务管理器的id">

           3,在需要事务的类前加注释@Transactional

SSH
209.STRUTS2 web层,Spring service层,Hibernate Dao层
210.web配置里面添加监听标签,再找到spring的xml文件,web配置过滤器
211.Struct2配置里面的action标签里class不需要写全路径,只要写Spring配置里Action的bean的id
212.Spring配置文件配置Hibernate对象:<bean id="" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 然后注入dataSource<property name="" ref="datasource">再指定使用hb的核心配置文件位置<property name="configLocations" value="classpath:hb路径名称">
213.service注入的name是dao的接口,ref是dao实现类
214.在spring配置hbTemplate的时候<property name="sessionFactory" ref="">注入sessionFactory对象
215.hb需要配置事务把只读改成commit

216.分模块引用:<import resource="classpath:bean.xml">


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值