Java(1):Java SE疯狂复习基本数据类型、OOP

0. 引言


在网上下载到一份很详细的文档,是某人的笔记,写得很是用心啊。

java的内容很多,怎么复习呢?看别人的笔记,效率会不会高一些?

考虑到绝大多数是从别人的笔记上摘下来的,所以我就把文章类型选成转载了。


金子这东西,只这一点点,就可以使黑的变成白的,丑的变成美的,错的变成对的,

卑贱变成高贵,老人变成少年,懦夫变成勇士。它可以使受诅咒的人得福,

使害着灰白色癫病的人为众人所敬爱,它可以使窃贼得到高爵显位,

和元老们分庭抗礼,它可以使鸡皮黄脸的寡妇重做新娘。

—— William Shakespeare


1. Hello,world

//public:表示类是公共的,一个文件中只有一个public类
//class:表示这个是一个类
//HelloWorld:类名(公共类的类名,必须和文件名一样)
 
public class HelloWorld
{
//一个主函数,程序的入口
  public static void main (String args[])
  {
     //执行语句
    System.out.println("helloWorld!");
  }
}
public类?纯的OOP?
不像C语言,一个main把所有的东西包住…?
C++,虽然通常也是一个main把所有东西包住,但是也可以把东西写到main外面,成为全局的。
e.g. MFC那样。很神奇……
【疑问】java的执行流程是什么样的?


Java源程序(.java文件)—(javac?)—>java字节码文件(.class文件)

——>由解释执行器(java.exe) 将字节码文件加载到java虚拟机(jvm)

——>字节码文件(.class)就会在java虚拟机中执行


2. 变量&数据类型


整数 :(byte一个字节 :-128---127  int四个字节:-2147483648---+2147483647   

short两个字节:-32768---+32767  long八个字节: )

小数(浮点): float  double

布尔 :boolean

字符:char(两个字节,可以存放汉字, char test1 ='中';)                引申到 字符串(类)


VC++6.0里面好像,char就是1个字节吧…… 


 在java中对char进行运算的时候,直接是当做ASCII码对应的整数

 

数据不能从高精度到低精度的转换 Byte<short<int<long<float<double

float a=3.4;是过不去的,在java中小数默认是double(双精度)

应该写成是float a=3.4f;

不过可以强制转换:int a=(int)1.2; int b=(int)1.9


3. this类变量


1.       this属于类的对象的而不是属于类的

2.       this不能在类的外部使用,只能在类定义时候使用!

3.       可以用类名直接访问静态变量


4. 类成员(static成员)

package com.qcy.test;

public class Static_member {
	
	private int j = 3;
	
	static int i = 1;

	static {
		System.out.println("这是静态块,执行一次");
		i++;
	} // 会自动执行一次,也只有一次

	public Static_member() {
		System.out.println("Static_member构造函数");
		i++;
	}
	
	public void accessI() {
		System.out.println("非静态方法访问静态变量:"+i);
	}
	
	public void accessJ() {
		System.out.println("非静态方法访问非静态变量:"+j);
	}
	
	static public void staticAccessI() {
		System.out.println("非静态方法访问静态变量:"+i);
	}
	
	static public void staticAccessJ() {
		// System.out.println(j); // 报错!
		System.out.println("静态方法不能访问非静态变量!");
	}

	public static void main(String args[]) {
		
		Static_member t1 = new Static_member();
		System.out.println(Static_member.i);
		Static_member t2 = new Static_member();
		System.out.println(i);
		
		t1.accessI();
		t1.staticAccessI();
		t2.accessI();
		t2.accessJ();
		Static_member.staticAccessI();
		Static_member.staticAccessJ();
		
		System.out.println(Static_member.i);
		
		
	}
}
这一段好神奇。
其中有一个静态块,static block。
运行结果为

这是静态块,执行一次
Static_member构造函数
3
Static_member构造函数
4
非静态方法访问静态变量:4
非静态方法访问静态变量:4
非静态方法访问静态变量:4
非静态方法访问非静态变量:3
非静态方法访问静态变量:4
静态方法不能访问非静态变量!

结论:都已经在上面的输出里面显示了。
static block应该会在最外面的大类 Static_member 声明的时候就执行( 尽管现在main函数里一句话都没有写!),而且只执行一次。
static int i = 1这句话, 也会执行。用C++的话来说,有点像是,在编译的时候,就已经知道应该向操作系统请求需要多少的内存了,而且已经把值填成1了。
static成员(方法&变量),都可以通过类名去直接access的!

我在想,为什么会叫类方法,类变量。以前都没有注意到这一点。
联想学C++的时候,如果是在某个class里变量有static修饰的话,这个变量应该是整个class共有一份。
而普通的成员变量是每个类实例出来(e.g. new出来)的对象独有的,有几个实例对象,就有几份。

.类方法(静态方法、静态函数):属于所有对象实例的。

Java中:类变量(static)原则上用类方法(static)去访问;

类方法中不能访问非静态变量,就是非类变量,

但是普通的成员方法可以访问静态变量(类变量)。

使用:类名.类方法名     对象名.类方法名

非类变量就是实例变量,属于每个对象自己的


5. OOP的几大特征


三(四)大特征:封装、继承、多态(、抽象)

抽象:把一类事物的共有的属性和行为提取出来,形成一个物理模板,此研究问题的方法就是抽象

封装:把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。

多态,OOP的核心。有点复杂。很是复杂…(总结暂时放在以后,e.g. C++学习的系列文章)


6. 封装的访问控制修饰符


四种访问控制符:

公开级别:public。

受保护级别:protected。对子类和同一个包中的类公开

默认级别: 没有修饰符,向同一个包的类公开,子类不可以访问类中默认级别的元素的(C++规定,class里,默认的也就是private!

私有级别:用private修饰,只有类本身才能访问(别人笔记上这么写,估计以后要好好想想这句话的含义)

公开>受保护>默认>私有
(C++里面,我暂时还没有写到复杂到包的地方,好像有个东西叫namespace吧,是不是有点像包?哎…一看就是我太渣……)

包的主要作用:区分相同名字的类,当类很多的时候可以很好的管理类,控制访问范围。


7. 访问修饰符&重载、覆盖


1. 一个文件中如果只有public类,那么这个public类可以不用主函数

2.  不想被继承就设为protected(和C++的继承不一样!)

3. 子类最多只能继承一个父类,Java里面不允许一个子类继承多个父类,C++却可以,如Java中一定要呢,就用接口吧

4. Java的所有类都是Object 的子类,继承层次数没有限制

5. JDK6.0里面有202个包,3777个类、接口、异常、枚举、注释和错误

6. 在做开发的时候多使用JDK帮助文档

7. 方法重载:类的同一种功能的多种实现方式,取决于调用者传递的参数

8. 方法重载注意事项:

  方法名相同

  方法的参数类型,个数,顺序至少有一项不同

  方法的修饰符可以不同

  方法的返回类型可以不同

另外:

  只是返回类型不一样并不构成重载

  只是控制访问修饰符不一样不构成重载


方法覆盖注意:

子类的方法的返回类型、参数、方法名称要和父类的一样,否则编译出错

子类方法不能缩小父类方法的访问权限,但是扩大是可以的(不是很清楚)

重载和覆盖,应该都是属于多态的问题。


第一篇,先”抄“这么多。

书中自有黄金屋,人丑就该多读书。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值