??xml version="1.0" encoding="utf-8" standalone="yes"?>
class 长方?{
int ?/span>;int ?/span>;
int 周长()
{
return 2*(?/span>+?/span>);
}
int 面积()
{
return ?/span>*?/span>;
}
public static void main(String[] args)
{
长方?chang1=new 长方?);
长方?chang2=new 长方?);
chang1.?/span>=10;
chang1.?/span>=5;
System.out.println("周长="+chang1.周长());
System.out.println("面积="+chang1.面积());
chang2.?/span>=20;
chang2.?/span>=8;
System.out.println("周长="+chang2.周长());
System.out.println("面积="+chang2.面积());
}
}
{
int height;
int weight;
void animal()
{
System.out.println("Animal constract");
}
void eat()
{
System.out.println("Animal eat");
}
void sleep()
{
System.out.println("Animal sleep");
}
void breathe()
{
System.out.println("Animal breathe");
}
}
/*
* 理解l承是理解面向对象程序设计的关键
* 在java中,通过关键字extendsl承一个已有的c,被承的cȝ为父c(类Q基c)Q新的类UCؓ子类Q派生类Q?/span>
* * 在java中,不允许多l承
*/
class Fish extends Animal
{
void fish()
{
System.out.println("fish constract");
}
void breathe()
{
//super.breathe();
//super.height=40;
System.out.println("fish boo");
}
}
class Integration
{
public static void main(String[]args)
{
//Animal an=new Animal();
Fish fh=new Fish();
//an.breathe();
//fh.height=30;
fh.breathe();
}
}
/*
*在子cd中定义一个与父类同名Q返回类型,参数cd均一致的ҎQ称为方法的覆盖
*Ҏ的覆盖发生在子类和父cM间?/span>
*调用父类的方法用super
*/
/*Ҏ变量superQ提供了父类的访?/span>
* 可以使用super讉K被父c被子类隐藏的变量或覆盖的方?/span>
* 每个子类构造方法的W一句,都是隐藏的调用superQ)Q如果父cL有这UŞ式的构造函敎ͼ那么在编译器中就会报错?/span>
*
*
*
*/
静态方法和静态变量的引用直接通过cd引用?
在静态方法中不能调用非静态的Ҏ和引用非静态的成员变量。反之,则可以?
可以用类的对象obj去调用静态的ҎmethodQ)Q如Qobj.method()?
Final在声明时需要进行初始化?
使用关键字final定义帔RQ例如:final double PI=3.1415926
作ؓ一U约定,在定义常量时Q通常采用大写的Ş式?
Final帔R可以在声明的同时赋初|也可以在构造函C赋初倹{?
Z节省内存Q我们通常常量声明ؓ静态的QstaticQ?
在声明ؓstaticӞp在声明final帔R时进行初始化?
static final double //PI=3.1415926;
int x,y;
point(int a,int b)
{
PI=3.1415926;
x=a;
y=b;
}
q种方式是错误的?
正确的方法如下:
static final double PI=3.1415926;
public class point
{
int x,y;
point(int a,int b)
{
x=a;
y=b;
}
point()
{
}
void output()
{
System.out.println(x);
System.out.println(y);
}
void output(int x,int y)
{
this.x=x;
this.y=y;
}
public static void main(String[] args)
{
point pt;
/*pt=new point();
{
pt.output();
}*/
pt=new point(3,3);
{
pt.output(5,5);
pt.output();
}
}
}
当类中有2个同名变量,一个属于类Q类的成员变量)Q而另一个属于某个特定的ҎQ方法中的局部变量)Q用this区分成员变量和局部变量?
使用this化构造函数的调用?
public class point
{
int x,y;
point(int a,int b)
{
x=a;
y=b;
}
point()
{
this(1,1);
}
void output()
{
System.out.println(x);
System.out.println(y);
}
void output(int x,int y)
{
this.x=x;
this.y=y;
}
public static void main(String[] args)
{
point pt;
pt=new point();
pt.output();
}
}
我们使用一个不带参数的构造方法来调用带参数的构造方法,在不带参数的构造方法中使用this(1,1);this本n表示pt对象Q他调用带参数的成员ҎQ来lx和y赋倹{大大简化了调用Ҏ?
在一个类中所有的实例Q对象)调用的成员方法在内存中只有一份拷贝,管在内存中可能有多个对象,而数据成员(实例变量Q成员变量)在类的每个对象所在的内存中都存在着一份拷贝。This变量允许相同的实例方法ؓ不同的对象工作。每当调用一个实例方法时Qthis变量被讄成引用该实例Ҏ的特定的cd象。方法的代码接着会与this所代表的对象的特定数据建立兌?
cd有状态和行ؓ的方式?
状态就像hq个cȝ状态有w高和体重,行ؓ有吃饭这个行为?
下面用一个点来说?
public class point
{
int x,y;
void output()
{
System.out.println(x);
System.out.println(y);
}
public static void main(String[] args)
{
point pt;
pt=new point();
{
pt.x=10;
pt.y=10;
pt.output();
}
}
}
构造函敎ͼ构造函数和cȝҎcM。构造方法的名字和类名相同,q且没有q回|构造方法主要ؓcȝ对象定义初始化状态?
我们不能直接调用构造函敎ͼ只能通过new关键字来调用从而创建类的实?
Java的类都要求有构造方法,如果没有定义构造方法,则java会默认用一个缺省的ҎQ就是不带参数的Ҏ?
public class point
{
int x,y;
point()
{
x=5;
y=10;
}
void output()
{
System.out.println(x);
System.out.println(y);
}
public static void main(String[] args)
{
point pt;
pt=new point();
{
pt.output();
}
}
}
对于构造方法,q可以用参数的ҎQ在实例化对象的时候,直接传递参数就可以?
public class point
{
int x,y;
point(int a,int b)
{
x=a;
y=b;
}
void output()
{
System.out.println(x);
System.out.println(y);
}
public static void main(String[] args)
{
point pt;
pt=new point(3,3);
{
pt.output();
}
}
}
New关键字的作用
为对象分配内存空间?
引v对象构造方法的调用?
为对象返回一个引用?
各种数据cd的默认值是Q?
数值型Q? 0
BooleanQ? false
CharQ? "\0"
对象Q? null
public class point
{
int x,y;
point(int a,int b)
{
x=a;
y=b;
}
void output()
{
System.out.println(x);
System.out.println(y);
}
public static void main(String[] args)
{
point pt;
pt=new point(3,3);
{
pt.output();
}
}
}
输出? 0
带参数的构造方法和不带参数的构造方法可以同时用。只要参数类型或参数个数不同。在调用是是通过Ҏ定参数类型和参数个数的方法来调用哪个构造方法?
q就是方法的重蝲QoverloadQ:重蝲构成的条ӞҎ的名U相同,但参数类型或参数个数不同Q才能构成方法的重蝲?
public class point
{
int x,y;
point(int a,int b)
{
x=a;
y=b;
}
point()
{
}
void output()
{
System.out.println(x);
System.out.println(y);
}
public static void main(String[] args)
{
point pt;
pt=new point();
{
pt.output();
}
/*pt=new point(3,3);
{
pt.output();
}*/
}
}
q?U方法都是可以用的?/span>
左移Q? <<
带符号右U:>>
无符号右U:>>>
? x x<<2 x>>2 x>>>2
17 00010001 01000100 00000100 00000100
-17 11101111 10111100 11111011 00111011
看一下程?x表示16q制。ffffffff表示-1
public class test {
public static void main(String[] args) {
int i=0xffffffff;
int c=i<<2;
System.out.println(i);
System.out.println(c);
}
}
输出?1?4.q表C?
public class test {
public static void main(String[] args) {
int i=0xffffffff;
int c=i<<2;
System.out.println(Integer.toHexString(i));
System.out.println(Integer.toHexString(c));
}
}
使用Integer.toHexString()?0q制转换?6q制?
输出?span style="color:black; font-family:宋体; font-size:10pt">ffffffff 和fffffffc左移2位最后补2?Q最后的1100转换?6q制是c
public class test {
public static void main(String[] args) {
int i=0xffffffff;
int c=i>>>2;
System.out.println(Integer.toHexString(i));
System.out.println(Integer.toHexString(c));
}
}
无符号右U输出是ffffffff?fffffff 右移2位后最左段?011Q{换位16q制是3
l习Q?
一个整?10从右端开始的4?位变?.
{?要想??位变?Q先构造一??位是0的数Q然后用110和这个数?amp;。Q何数?与都?Q就完成了Q务。要构造一??位是0的数Q先构造一个低4位是1的数15Q然后将它左U?位,然后取反Q就构造成4?位是0的数了。程序如下?
public class test {
public static void main(String[] args) {
int i=15;
int j=i<<3;
int c=~j;
int k=110;
int l=k&c;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(j));
System.out.println(Integer.toBinaryString(c));
System.out.println(Integer.toBinaryString(k));
System.out.println(Integer.toBinaryString(l));
}
}
输出?
00001111
01111000
10000111
01101110
00000110
一个数左移一位等于是数*2Q右UM位相当于数/2?
左移2位相当与乘两?Q右U?位相当与除两?.
01101101
&
00110111
00100101
| 按位? 只要1个真qQ都假才?
01101101
|
00110111
01111111
^按位异或 一真一假才为真Q都真都假就是假?
01101101
^
00110111
01011010
~按位取反 0?Q??
~01101101
10010010
计算Z有原码,反码Q和补码?
原码
最高ؓ作ؓW号?正,1负。其余各位表C数值的l对倹{?
+7的原码是 00000111
-7的原码是 10000111
原码的问题是+0?0的表C?
+0?0000000
-0? 10000000
2个数g同?
反码
一个数如果为正Q则它的反码与原码相同,如果Q则W号位ؓ1Q其余取反?
+7?0000111
-7 ?11111000
反码的问题也?0?0的问?
+0?00000000
-0 ?11111111
2个数g同?
补码
利用溢出Q我们将减法变成加法?一个数如十q制Q一个字节一个数Q有8位,过p一?
一个数为正Q则它的原码Q反码,补码相同。如果ؓ负,则符号位?Q其余对原码取反。然后加1
+7?00000111
-7? 11111001
+0?0000000
-0?00000000Q然后丢掉最高的9位则?0000000
?0的表C相同,所以计机中是采用的是补码?
已知一个负数的补码Q{换ؓ十进制?
?11111010 先取?
00000101 转换为十q制
? 加上负号
?5 再减?
?6
public static void main(String[] args) {
for(int i=0;i<10;i++)
{System.out.println(i);
}
}
}
对于java中for语句中定义的变量的作用域只在{}内。For以外不能讉K。这点和c语言不同Q知道就可以了?
public class Welcome {
public static void main(String[] args) {
int i=3;
System.out.println(i++);
}
}
输出?
++i是先+1Q然后参与运?
public class Welcome {
public static void main(String[] args) {
int i=3;
System.out.println(++i);
}
}
输出?
下面q个例子说明了这个道?
public class Welcome {
public static void main(String[] args) {
int i=3;
int count=(i++)+(i++)+(i++);
System.out.println(i);
System.out.println(count);
}
}
输出??2Qi取了3ơ是6Qcount?+4+5=12
public class Welcome {
public static void main(String[] args) {
int i=3;
int count=(++i)+(++i)+(++i);
System.out.println(i);
System.out.println(count);
}
}
输出??5Qi取了3ơ是6Qcount?+5+6=15