Java编程思想第二章总结+练习

  • 引用操纵对象

Java基于c++,但更加面向对象。java用引用操作对象(这里不考虑基本类型,稍后讲解)。用书上的类比即遥控器(引用)和电视(对象)的关系。想调节电视音量画面频道时,我们用遥控器即可。带着遥控器在房间里走动也可以操控电视。创建引用例子:

Student freshman;
String str;
Car bmw;
//等等

但注意这里引用没有和对象关联,安全的做法是创建引用同时进行初始化。如:

String s = new String("hello");
  • 关于对象存储

关于对象储存,我们要粗略了解下程序内存分配。有五个不同地区储存数据:

1.寄存器。最快,但寄存器数量有限。

2.堆栈。仅次于寄存器,java引用存于此。

3.堆。存放所有java对象。在堆里分配储存很灵活,但存储分配和清理会需要更多时间。(c++是在栈中创建对象)

4.常量储存。常量值就在程序代码内部。

5.非RAM存储。数据存活于程序之外。如磁盘里的存储。

  • 对象特例:基本类型

就如物质有最小组成单位原子(我不是学物理的可能会有更小的),我们关于对象有特例——基本类型。如boolean,int,char等等。这些如果在堆上储存,太慢了。所以这些并非是引用的,而是直接在堆栈里。

java中每种基本类型占的存储空间不变,不会随硬件变化而变化,这是java具有可移植的原因之一。这里注意每个基本类型有与之对应的包装器类型,使得可在堆中创建一个非基本对象,用来表示对应基本类型。举例:

char c='x';
Character ch=new Character(c);
//Character ch=new Character('x');也行
//高一点的版本有自动包装功能,也可以这样写,后面会学
//Character ch='x';
//还可以反向转换,即抓包
//char c=ch;

对于位数过大的int,考虑BigInteger和BigDecimal,这两个是包装器没有对应基本类型,高精度的代价就是运算速度变慢。

  • java中数组

java主要目标是安全性,所有有初始化和超界检查。故数组和c++相比,牺牲少量时间和空间,但取而代之的是安全和效率的提升。

创建数组对象,也是创建一个引用数组,每个引用都会被初始化为null。若java检测到null说明引用没指向其他对象,会报错。

当然也可以创建存放基本数据类型的数组,并且java能保证其被初始化,因为它会将这种数组的内存置零。

  • 不用销毁对象

作用域和c++差不多,但也有注意的地方:

{
int x=12;
{
  int x=100;//错的
}
}

这个在c++里是可以的,但java不行,编译器会说x已经被定义。这样做原因是设计者认为这样会使得程序混乱。

关于对象的作用域:

{
String s=new String("hello");
}//这里超出作用域

引用s在作用域终点消失,但是s原来指向的对象仍占据内存空间。可惜在这之后我们无法再访问这个对象了,因为指向它的唯一应用没了。java回收掉这个内存靠的是垃圾回收器,这比c++友好。

  • 创建新的数据类型:类

用class关键字,如:

class Student{
//省略接口等等
}

创建对象可以这样:

Student freshman=new Student();

java中如果类中某个数据成员是基本类型,那么就算没有初始化,java也会确保其有默认值,具体书上有表格。(注意局部变量是不行的,举例:如果在方法中定义int x;java会报错。)

  • 方法、参数、返回值、参数列表

前三个简单,不说了,这里简单说下参数列表,就一句话,注意值传递和引用传递。

  • java编码风格

类名首字母大写,如果由几个单词构成则并在一起并且每个单词首字母大写,如:

class AllTheColorsOfTheRainbow{
//
}

方法,成员变量,对象引用名称等等,与类风格一样但第一个字母小写,如:

class AllTheColorsOfTheRainbow{
int anIntegerRepresentingColors;
void changeTheHueOfTheColor(int newHue){
//...
}
//...
}

之后是本书练习:

练习一:

class DataOnly{
	int num;
	char a;
}
public class Test1 {
	public static void main(String[] args) {
		DataOnly sample =new DataOnly();
		System.out.println(sample.num);
		System.out.println(sample.a);
	}
}

练习二:

public class Test2 {
	public static void main(String[] args) {
		System.out.println("Hello,World");
	}
}

练习三:

class ATypeName{
	String str;

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}
	
}

public class Test3 {
	
	public static void main(String[] args) {
		ATypeName sample =new ATypeName();
		sample.setStr("Au Revoir");
		System.out.println(sample.getStr());
	}
	
}

练习四,练习五:

class DataOnly1{
	int i;
	double d;
	boolean b;
	public int getI() {
		return i;
	}
	public void setI(int i) {
		this.i = i;
	}
	public double getD() {
		return d;
	}
	public void setD(double d) {
		this.d = d;
	}
	public boolean isB() {
		return b;
	}
	public void setB(boolean b) {
		this.b = b;
	}
	
}

public class Test4 {
	public static void main(String[] args) {
		DataOnly1 sample=new DataOnly1();
		sample.setB(true);
		sample.setD(0.999);
		sample.setI(42);
		System.out.println(sample.getD());
		System.out.println(sample.getI());
		System.out.println(sample.isB());
	}
}

练习六:

public class Test6 {
	static int stroage(String s) {
		return s.length()*2;
	}
	public static void main(String[] args) {
		System.out.println(stroage("hello"));
	}
}

练习七:

class StaticTest{
	static int i=47;
}
class Incrementable{
	static void increment() {
		StaticTest.i++;
	}
}

public class Test7 {
	public static void main(String[] args) {
		Incrementable.increment();
		System.out.println(StaticTest.i);
	}
}

练习八:

class Student{
	String name;
	int age;
	static String university;
	Student(String str,int num){
		name=str;
		age=num;
	}
}
public class Test8 {
	public static void main(String[] args) {
		Student a =new Student("XiaoMing",19);
		Student b=new Student("XiaoHong",20);
		a.university="NanKai";
		b.university="Tianda";
		System.out.println(a.university);
		System.out.println(b.university);
	}
}

练习九:

public class Test9 {
	public static void main(String[] args) {
		Boolean sample1=true;
		Character sample2='a';
		Byte sample3=127;
		Short sample4=42;
		Integer sample5=4242;
		Long sample6=424242L;
		Float sample7=0.42f;
		Double sample8=42.4242;
		Void sample=null;
		System.out.println(sample1+" "+sample2+" "+sample3+" "+sample4+" "+sample5);
		System.out.println(sample6+" "+sample7+" "+sample8+" "+sample);
	}
}

练习十:

public class Test10 {
	 public static void main(String[] args) {
	        int argsLength = args.length;
	        System.out.println("argsLength:" + argsLength);
	        for(int i = 0; i < argsLength; i++){
	            System.out.println("args["+ i + "]" + "=" + args[i]);
	        }
	    }
}

练习十一:

class AllTheColorsOfTheRainbow{
	int anIntegerRepresentingColors;
	void changeTheHueOfTheColor(int theHue) {
		if(theHue==1) {
			System.out.println("red");
		}
	}
}
public class Test11 {
	public static void main(String[] args) {
		AllTheColorsOfTheRainbow sample=new AllTheColorsOfTheRainbow();
		sample.changeTheHueOfTheColor(1);
	}
}

练习十二到十六:

总之加个/**  */就行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值