数据类型
1、double保留两位数字
double f=30.3336;
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(f));
2、System.out.println("3>1="+(3>1)); // 3>1=true;
3、任何类型的数据都向String转型;
4、a++,++a的区别
int a=3;
int b=1;
int y=5;
System.out.println(y+(a++)); //8
System.out.println(y+(++b)); //7
a++ 先执行整个语句后再将a的值加1 ;++b 先把b的值加1后再执行整个语句。
5、&&(短路与)和&的区别以及||(短路或)和|的区别
&&时判断第一个条件为false,后面的条件不再进行判断。
&时要对所有的条件进行判断。
||判断第一个条件为true,后面的条件就没有进行判断就执行了括号中的代码,而|要对所有的条件进行判断,
所以会报错。
6、
a+=b ,将a+b的值存放到a中,相当于a=a+b;
7、
int a=1;
int b=2;
a*=b++;
System.out.println(a);//a=2
System.out.println(b);//b=3
a*=b++,a*b的值存放到a中后b再加1;
8、三目运算符
int x=10;
int y=4;
System.out.println(x>y?x:y); // 10
三目运算符相当于if...else语句,条件判断为真,则结果为:前的表达式否则结果为:后的表达式
9、if是条件判断,如果满足条件就会进入相应的条件分支,可以进入多个if分支;
10、当程序执行到break语句时,即会离开循环,继续执行循环外的下一个语句,如果break语句出现在嵌套循环的内层,则break语句只会跳出当前层的循环。
11、数组存放的是类型完全相同的数据。
12、基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。堆内存用来存放由 new 创建的对象和数组。
13、int score[ ][ ]=new int[3][4];配置一块内存空间,供3行4列的整形数组score使用,可保存的元素有4*3=12个;
14、单位换算
一个二进制数据0或1,是1bit;
* 1 bit = 1 二进制数据
* 1 byte(字节) = 8 bit(位)
* 1 字母 = 1 byte = 8 bit(位)
* 1 汉字 = 2 byte = 16 bit
1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节。
ASCII是一个字节,Unicode是两个字节。
Java的字符是Unicode的,所以是两个字节;
KB是千字节,MB为兆字节,GB为吉字节,换算关系为:
1Byte(通常简写为B)=8bit
1KByte=1024Byte
1MByte=1024KByte
1GByte=1024MByte
15、System.out.print( )可以打印出不同类型的数据,也就是说println()方法被重载了;
16、方法重载的要求就是两同一不同:同一类中方法名相同,参数列表不同。
至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。
17、return有一个特性就是一旦调用return 那么直接结束方法.
18、递归调用,就是一个方法自己调用自己。在使用递归调用的时候,应该声明一个操作的终结点。但是采用递归调用的时候会增加内存负担,因为每调用一次方法都要新开辟一段栈空间,直到该方法调用结束才释放。通常意义上递归会有结束条件。所谓结束条件就是告诉程序以及到达本次递归的最底层了,不必继续运行的条件。递归至少要包括一个结束条件,而且要确保程序能最终能到达某一个结束条件。不然的话,你的递归程序会因栈空间不足而中止。示例:
public static void main(String[] args) {
System.out.println("计算结果:"+sum(100));
}
public static int sum(int num) {
if(num==1){
return 1;}
else{
return num+sum(num-1);
}}
19、For-Each循环的缺点:丢掉了索引信息。当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。
20、SimpleDateFormat 是一个各种项目中使用频度都很高的类,主要用于时间解析与格式化,频繁使用的主要方法有parse和format.
parse方法:将字符串类型(java.lang.String)解析为日期类型(java.util.Date) format方法:将日期类型(Date)数据格式化为字符串(String)21、Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor22、spring给map和properties注入,<props>和<map>的使用方法相似,区别在于<props>的值只能是String类型,所有没有必要使用<value>元素来区分String型数值和非String型数值;
- <property name="empMaps">
- <map>
- <entry key="11" value-ref="emp1" />
- <entry key="22" value-ref="emp2"/>
- <entry key="22" value-ref="emp1"/>
- </map>
- </property>
- <!-- 给属性集合配置 -->
- <property name="pp">
- <props>
- <prop key="pp1">abcd</prop>
- <prop key="pp2">hello</prop>
- </props>
- </property>
23、spring实例化bean的过程。
实例化bean测试结果:先构造函数——>然后是b的set方法注入—— >InitializingBean 的afterPropertiesSet方法——>init- method方法
24、static声能的属性是所有对象共享的,只要修改一个对对象的static属性则全部对象的相应属性都会发生改变;
25、在Java中主要存在4块内存空间:
(1)栈内存空间:保存所有 的对象名称(确切地说是保存了所引用的堆内存空间的内存地址)
(2)堆内存空间:保存每个对象的具体属性内容
(3)全局数据区:保存static类型的属性
(4.)全局代码区:保存所有的方法定义
26、为什么static声明的方法不能调用非static方法和属性?
静态方法在没有创建实例时就可以使用,而非静态方法一定要创建实例才会存在,所以在静态方法中调用非静态方法是不允许的,因为非静态方法在未实例化时是不存在的。
27、通过static属性统计一个类产生了多少个实例;
public class Demo {
private static int count=0;
public Demo(){
count++;
System.out.println("产生了"+count+"个对象");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo demo1=new Demo();
Demo demo2=new Demo();
Demo demo3=new Demo();
}
}
28、使用static为对象进行自动的编名操作。
public class Demo {
private static int count=0;
private String name;
public Demo(){
count++;
this.name="Demo_"+count;
}
public String getName() {
return name;
}
public Demo(String name) {
this.name = name;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Demo().getName()); //Demo_1
System.out.println(new Demo("LH").getName()); //LH
System.out.println(new Demo().getName()); //Demo_2
System.out.println(new Demo("LiLy").getName()); //LiLy
System.out.println(new Demo().getName()); //Demo_3
}
}
28、this和super都可以调用构造方法,但二者是不可以同时出现的;无论子类如何操作,最终首先要必须调用父类中的构造方法;
29、final关键字
(1)使用final声明的类不能有子类
(2)使用final声明的方法不能被子类重写
(3)使用final声明的变量即成为常量,常量不可以修改,要求全部的字母大写;
30、==永远是用来比较内存中的地址的;
31、==和equals的比较
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
32、 基本类型值:指的是保存在栈内存中的简单数据段;引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针指向内存堆中实际的值;
33、当传递方法参数类型为基本数据类型(数字以及布尔值)时,一个方法是不可能修改一个基本数据类型的参数。
当传递方法参数类型为引用数据类型时,一个方法将修改一个引用数据类型的参数所指向对象的值。
34、虽然接口不能继承一个类,但是依然是Object类的子类,因为接口本身是引用数据类型。
35、所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number的子类。
36、装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
37、在java程序设计时应充分地利用异常处理机制,以增进程序的稳定性及效率;
38、通过异常处理,即使程序出现异常之后也可以正确执行;
39、e.printStackTrace();最完整的异常信息打印方式;
40、Exception(checked和unchecked)
RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException 的任何子类都无需在 throws 子句中进行声明。它是Exception的子类。
checked异常:
- 表示无效,不是程序中可以预测的。比如无效的用户输入,文件不存在,网络或者数据库链接错误。这些都是外在的原因,都不是程序内部可以控制的。
- 必须在代码中显式地处理。比如try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。
- 继承自java.lang.Exception(java.lang.RuntimeException除外)。
unchecked异常:
- 表示错误,程序的逻辑错误。是RuntimeException的子类,比如IllegalArgumentException, NullPointerException和IllegalStateException。
- 不需要在代码中显式地捕获unchecked异常做处理。
- 继承自java.lang.RuntimeException(而java.lang.RuntimeException继承自java.lang.Exception)。
41、不要在主方法处使用throws关键字,如果在主方法中使用throws,则程序出现问题后将交由JVM处理,将导致程序中断;
42、finally作为异常的统一出口,在此块语句中尽量不要出现throw或return这样的语句,这样可以避免不必要的问题出现;
43、静态导入:import static com…..ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名的方式来调用。
44、java命名规范
1、 项目名全部小写
2、 包名全部小写
3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。
如:public class MyFirstClass{}
4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。
如:int index=0;
public void toString(){}
5、 常量名全部大写
如:public static final String GAME_COLOR=”RED”;
6、所有命名规则必须遵循以下规则:
1)、名称只能由字母、数字、下划线、$符号组成
2)、不能以数字开头
3)、名称不能使用JAVA中的关键字。
4)、坚决不允许出现中文及拼音命名。

浙公网安备 33010602011771号