第三章 运算符,表达式和语句
1.各类型的精度 从小到大 byte short char int long float double
如果混合类型运算中最高精度为long,float,double或者int,则最后结果分别为long,float,double或者int型,若最高精度小于int,最后结果为int型(用C++试了,short+char变成int。但是由于java没有sizeof所以就没有试) 其中运算指加减乘除,按位与或。
2.+-*/,关系,赋值,按位与或,按位异或(符号^,相同为0,不同为1)都相同
3.if,switch,for,while,break,continue都一样。其中要注意,break和continue是针对所在最小的循环而言
4.若有枚举变量
enum Weekday{
sun,mon,tue
}
则Weekday.value()表示sun,mon,tue组成的数组
可以定义 Weekday []a=Weekday.value();
System.out.print(a[1]);
Java的数组定义支持两种格式:
int[] a和int a[]
前者是Java推荐的格式
后者是为了迎合C语言入门的编程人员的习惯
5.若有数组
for(声明循环变量 : 数组的名字)
例如
int []b=new int[4];
for(int i=0;i<4;i++)
b[i]=2*i+1;
for(int i : b)//只能在括号里定义,i依次取a数组的每一个元素的值
System.out.println(i);
第四章 类与对象
简介
1.java是一种面向对象的语言,具有封装性,继承,多态的特点。
类
1.关于类的变量的有效范围
class a{
int i=0;//此时i等于0
{
int i=1;//此时i等于1 局部优先
this.i=2;//此时this.i等于2
}
//此时i等于0
}
2.命名,第一个字母小写,其他大写(变量,方法)
3.方法的重载。方法的名字一样,但是参数不一样。比如返回面积 float getArea(int r)//PI*r^2 floatgetaArea(int x, int y)//x*y 注意参数不同,返回类型不同不行
4.实例变量和类变量,实例方法和类方法。其中加static的是类变量和类方法。
5.
a.对变量的操作只能放在方法里,比如int a=0;valid but int a; a=0;invalid
b.实例方法既能对类变量也能对实例变量进行操作,能对类方法和实例方法进行调用,但是类方法只能对类变量进行操作,也只能调用类方法。
对象
1.创建一个类对象
class student
{
int a;
student(int b)
{
a=b;
}
}
student qiaozhijian=new student();//注意跟C++的类初始化不同。此时分配空间,默认值0。当没有构造方法或者有几个并且声明了无参数的默认构造方法。
student zhangyuchen=new student(0);//使用了自己设置的构造方法
2.对象的引用和实体
a,java的对象在堆中分配内存,对象的引用是在栈中分配内存。当类创建一个对象时,类中的成员变量在堆中分配内存空间,这些内存空间称为变量的实体或者对象的变量,而对象中存放着引用,引用在栈中分配内存,确保实体由该对象操作使用。
b,两个类,p1,p2。p1=p2代表把p2的引用给p1,此时他俩的实体就相同了。
c,没有实体的对象叫做空对象,如果使用空对象就会产生nullpointerexception的错误报告,并且编译的时候不能检测,因此我们要注意。
d,java有垃圾回收机制,会周期的检测某个实体是不是已不再被任何对象使用。因此我们不用跟C++一样去释放内存。例如p1的实体到最后就会被释放掉。因此,java也很少出现内存泄漏,即程序忘记释放内存而导致内存的溢出。
参数传值
1.基本类型参数的传值:只能把低的传给高的,比如把int传给double
2.引用类型参数的传值,如数组,对象,接口,都是传他们的引用,因此改变参数的实体也会改变原函数的实体。
3.方法中的and so on 比如:
方法 float g(float a, int...x)//表示不确定数量的几个int型的x
{
for(int i=0;i<x.length;i++)//x.length表示实际输入的x的个数
{
int sum=0;
sum=sum+x[i];//表示第几个x
}
}
对象的组合
同一目录下的源文件的类可以相互调用
STATIC
关于类变量和实例变量
1.一个类创建的不同对象被分配不同的内存,但是类变量却是被共享的
2.改变其中一个对象的类对象,其他对象的类对象也被改变,因为两者本身就是一回事
3.在把类的字节码加载到内存的时候,同时也会给类变量分配空间。可以用类名调用类变量。
关于类方法和实例方法
1.在创建类时就和类变量一起被分配内存
2.因此可以不适用实例变量,仅用类变量就完成任务吗,节省了内存资源。
THIS
this.变量=类名.变量 this.方法=类名.方法 和C++差不多的
注意,如果方法的局部变量和成员变量相同,不能省去this,其他情况都是可以的
包
1.作用:包名的目的是有效的区分名字相同的类。不同源文件的两个类的名字相同时,可以通过类属不同的包来区分。
2.package 关键字 package 包名
3.package sunrise //写在源文件的开头
package sun.com.cn//表示得到的类的字节码文件保存在如d:\summer\sun\com\cn里
4.运行有包名的主类时,就要到其上一层目录中,用字java运行,比如 d:\summer\java sun.com.cn.main.java //其中main是主类,.java是后缀(这是命令行运行,我没用过,前面说到了,我用Android studio直接编译的)
5.编译时 用字javac,也要在上一层,如 d:\summer javac \sun\com\cn\main.java 编译后就会生成.class文件
6.建议包名用自己公司的域名倒置,如cn.com.action。而且不用java做包名。
7.如果没有包名,只要字码节在一个目录里就属于同一个包,虽然还是没有包名
import
1.引用类库中的类。import语句要写在package和类名的中间。
有很多类库,比如java.until 数据结构类
import java.until.*表示引用所有的类
import java.until.Date 表示只引用until里的Data类(其中java.lang是核心类库,不用我们引用。并且import只会增加编译时间不会影响性能,我们只给用的着的类分配空间)
2.引用自定义包的类。
这点对于命令行来说还有一些步骤,我就不多说了。
简单地 import sun.com.cn.*
3.引用无包名的类
把类放到想引用他的类的同目录下。
4.有三个类都叫A,分别没有包名,包名是B,和C
那么 A是没有包名的类
B.A C.A 分别是有对应包名的类
访问权限
private 只能自己的类访问
public 同一个包,被import后的别的包都能
protected 同一个包被访问,其他的包不行
friend 当没有前面三个时,就是友元的 ,访问权限和protected暂时一样,在后面讲到子类时还会继续说
private和protected不能修饰类
基本类型的类包装
基本用不到
反编译和文档生成器
javap和javadoc暂时用不到
jar文件
命令行的,不是很想了解,以后慢慢看。现在用不到,谁让我上来就Android studio了呢