下一篇:http://blog.csdn.net/greatbody/article/details/9375711
这篇文档就作为我学习Java的记录吧,从最初级别的知识来开始,希望给菜鸟提供参考。
简单说明下:
我自学了7年的VB;大学学习了C语言,属于熟悉型的掌握,远没有对VB的那种理解透彻;另外学习了VB.NET,熟悉了下VC++;
我的这系列文章,默认你已经有一定的基础了,至少是纯C的基础。最好再加上些VB的基础。
我写这些内容,也是已一个熟练VB、熟悉C的Java的初学者的身份作为基础。如果你没有任何的C或VB基础,请先找本书,看看基础内容吧。
第一个问题,输出的时候,“\r”“\n”分别是回车和换行的意思,但是实际执行的效果却让人很惊奇,它们执行的效果完全一样,我的系统是Win7 32位 SP1
第二个问题,取反的命令执行的时候,输出的数据类型与原始数据类型会有区别,如下:
import java.io.IOException;
public class hello {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
byte j=0;
System.out.println("结果:"+getType(~j));
}
public static String getType(Object o){
return o.getClass().toString();
}
}
j变量初始为byte类型,而“~j”这个语句返回的结果是“class java.lang.Integer”,也就是int类型的。这个与我们的常识有冲突。我们的常识是位运算符返回的结果与被运算的变量的数据类型或者字节大小一致,但是java并非如此。
学到了将数值输出为二进制等形式的方法:
十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinaryString(int i)
Integer.valueOf("FFFF",16).toString() 八进制转成十进制 Integer.valueOf("876",8).toString() 二进制转十进制 Integer.valueOf("0101",2).toString()
从网上找的一个获取变量的类型的代码:
public static String getType(Object o){
return o.getClass().toString();
}
我写的一个简单的求与运算程序:
import java.io.IOException;
public class hello {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
byte j=0; //定义byte类的变量j
j=0x11; //赋初值
j=(byte)(j & 0x13); //j 和 0x13求与,并转为byte类型
System.out.println("结果(数据类型):"+getType(j));
System.out.println("数据值:"+Integer.toBinaryString((int)j)); //将byte类输出为二进制字符串形式,只有先转为int类型,才可以
System.out.println("输出为二进制:"+Byte.parseByte("1101",2));
}
public static String getType(Object o){
return o.getClass().toString(); //输出类的名称
}
}
然后是一个位的移动
import java.io.IOException;
public class hello {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
byte j=0; //定义byte变量j
j=0x11; //赋初值
j=(byte)(j<<1); //j所有位左移
System.out.println("结果(数据类型):"+getType(j));
System.out.println("输出为二进制:"+Integer.toBinaryString((int)j));
System.out.println("数据值:"+j);
}
public static String getType(Object o){
return o.getClass().toString();
}
}
常量的定义和C语言,和VB等都不一样,使用的是:
final来表示,例如:
final int k=56; //表示定义一个值为56的变量k。
再就是static变量的问题,
放在类里面的Static变量,只可以通过静态的方法访问:
比如这样的一个类:
public class Lover {
static String lovername="SunSoft";
String loverNameString="Unknown";
}
在程序中,可以这么访问lovername:
import java.io.IOException;
public class hello {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Lover ll =new Lover(); //新建一个此类的对象(实例)
System.out.println("通过对象调用数据:"+ll.loverNameString); //对象名.变量名 的方法访问(动态)变量
System.out.println("通过对象调用数据:"+Lover.lovername); //直接使用 类名.变量名 的方法访问静态变量,这两种访问方法不可反过来。
}
上面的访问方法是推荐的,也就是说,以上的代码无错误,无警告
但是,实际上,可以通过对象(或者称为实例)来访问静态变量,并且得到正确的输出。但是,在eclipse中,这样的语句会被加上黄色的波浪线,表示警告或者不推荐。
如下,通过创建类的对象的方法,访问静态和非静态变量;通过类名直接访问静态变量。【注意:无法通过类名直接访问非静态变量,这种做法是非法的】
import java.io.IOException;
public class hello {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Lover ll =new Lover();
System.out.println("通过对象调用非静态数据:"+ll.loverNameString);
System.out.println("通过对象调用静态数据:"+ll.lovername);
System.out.println("通过静态方式调用静态数据:"+Lover.lovername);
}
对应的Lover类的代码:
public class Lover {
static String lovername="SunSoft";
String loverNameString="Unknown";
}
和前面类似。
非静态的方法需要创建类的实例才可以通过实例访问,且仅可如此访问
静态的方法,则可以通过类名直接访问或者创建对象来访问。与上面相同,创建对象来访问静态方法的做法也是不被eclipse推荐的,但是可以正常运行。
如下代码:
import java.io.IOException;
public class hello {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Lover ll =new Lover();
System.out.println("通过类名直接调用静态方法:"+Lover.LoveMe("SunSoft Static Call"));
System.out.println("通过对象访问非静态方法:"+ll.LoveMeD("SunSoft Dynamic Call"));
System.out.println("通过对象访问静态方法:"+ll.LoveMe("SunSoft Dynamic Call"));
}
Lover类代码:
public class Lover {
static String LoveMe(String yourname){
return ("I Love "+yourname);
}
String LoveMeD(String yourname){
return ("I Love "+yourname);
}
}
现在看到了this关键字,打算以后再研究。
再就是,byte类型变量k经过这样的计算会变成Integer类型:
byte k=9;
k*2 //这个表达式结果为Integer,如果写k=k*2;会因为类型不匹配无法自动转换;所以:
k=(byte)(k*2) ; //需要这样进行强制的转换。