package com.java.test;
public class Test1 {
/**
* @&与&&区别:都表示与操作,都为TRUE是才为TRUE,只要有一个为FALSE,则为FALSE
* &&短路功能,&按位与
*/
public abstract class T{
public void T1(){}
abstract void T2();
//static abstract void T3();abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系
}
public static void main(String[] args) {
String s = null;
if(s!=null&&!s.equals("")){ //用&会报NullPointerException错误,用&&短路功能前面为FALSE,后面就不用再判断
}
System.out.println(0x31&0x0f);//&按位与,与0x0f与,取最低4个比特位
final StringBuffer sb = new StringBuffer("so"); //final 修饰一个对象时,是对象引用不能改变,但值可以改变
final String str = "hello";
//sb = new StringBuffer("change object");
sb.append(" good");
System.out.println(sb);
String s1 = "hello";
String s2 = "hello";
String s3 = new String("world");
String s4 = new String("world");
//==比较的两个变量的值是否相等,也就是比较变量所对应的内存中所存储的数值是否相同
//equals比较的是两个独立对象中的内容是否相同,字符串的比较大多使用equals
System.out.println((s1==s2)+" "+(s1.equals(s2)));//true true
System.out.println((s3==s4)+" "+(s3.equals(s4)));//false true s2,s4中存储的是两个不同对象(new的对象都不同)的首地址
//Math提供三种取整方法,ceil向上取整,floor向下取整,round四舍五入相当于Math.floor(x+0.5)
System.out.println(Math.round(11.5)+" "+Math.ceil(11.2)+" "+Math.floor(11.8));
System.out.println(Math.round(-11.5)+" "+Math.ceil(-11.2)+" "+Math.floor(-11.8));
}
}
package com.java.test;
public class Test2 {
private int t1;
public void show(){
class Inner1{
public void show(){
t1 = 3;
}
}
Inner1 i1 = new Inner1();
i1.show();
System.out.println(t1);
}
public class Inner2{
//static int i = 10; 内部类中不能定义静态成员变量
public void show(){
t1 = 4; //内部类可以访问外部类的成员变量
System.out.println(t1);
}
}
static public class Inner3{
public void show(){
//System.out.println(t1);静态内部类不能访问非静态成员变量
}
}
public static void main(String[] args){
Test2 t2 = new Test2();
Test2.Inner2 i2 = t2.new Inner2();
Test2.Inner3 i3 = new Test2.Inner3();
t2.show();
i2.show();
}
}
package com.java.test;
import java.util.Date;
import java.util.StringTokenizer;
public class Test3 extends Date {
public static void main(String[] args) {
new Test3().test3();
String s = "This i=s\na\tt=est";
//StringTokenizer tokens = new StringTokenizer(s);//java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。
StringTokenizer tokens = new StringTokenizer(s,"=");
System.out.println(tokens.countTokens());
while(tokens.hasMoreElements()){
System.out.println(tokens.nextElement());
}
//这说明javac编译可以对字符串常量直接相加的表达式进行优化,
//不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
String a = "a";
String b = a+"b";
String c = "a"+"b";
System.out.println(b=="ab"); //false
System.out.println(c=="ab"); //true
}
public void test3(){
/**
* 由于getClass()在Object类中定义成了final,子类不能覆盖该方法并且返回此 Object 的运行时的类,
* 返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象
*/
System.out.println(super.getClass().getName());//com.java.test.Test3
System.out.println(this.getClass().getName());//com.java.test.Test3
System.out.println(super.getClass().getSuperclass().getName());//java.util.Date
System.out.println(Date.class.getName());//java.util.Date
}
}