①数组:
int [] a;//未初始化变量 int a[] 也可以 不过不常用
double [] b = null;//已经初始化的变量
养成良好习惯,声明变量的时候要初始化
函数内的局部变量不会自动初始化
成员变量如果自动初始化
int 默认是0
引用变量默认为null
int [] a = new int [10];
数组里面的数据默认为0
boolean [] ba = new boolean [10];
Student[] sa = new Student[10];//该引用变量 创建了 一个学生数组的引用对象
for(int i=0;i<sa.lengtn;i++){//任何对象都有一个length
sa[i] = new Student();
}
学生对象在内存中可能不连续
二维数组
int[][] a = new int [2][3];
两层循环进行初始化
int [][] a = new int [2][];
//int [][] a = new int [][];//错 必须指定数组长度
a[0] = new int [5];
a[1] = new int [6];
②运算符
按优先级:
算数运算
关系运算
逻辑运算
模运算的符号位与被除数的符号位相同,与除数的符号无关
前置++ 后置++
算数运算的结果不能低于 int 类型
Eg:
byte b = 6;
byte c = 7;
b = b + c;//执行出错,b+c自定提升为整形
b = (byte)(b + c);
强制类型转化可能出错
int i = 1000;
byte b = (byte) i;//结果为-24
op 为运算符
x = x op y;
x op= y;
byte x = 0,y = 1;
x = x + y;//语法运算
x += y;// += 隐含类型转换
提升运算
short s = 5;
int i = s;
交换顺序不可以,除非强制类型转换
小类型可以向大类型赋值
byte,short,int,long,float,double
byte [] ba;
int [] Ia;
不可以互相赋值
<< 左移
>> 右移
>>> 无符号右移运算,符号位补0
int i = 0;
byte b = 6;
long l = 24L;
i>>33;//虚拟机会自动和32取余
b>>33;//虚拟机会自动和32取余,提升为 int
l>>65;//虚拟机会自动和64取余
instanceof
③逻辑运算
!逻辑非,只接受boolean类型的变量
~ 位反
& 位与
^ 位异或
| 位或
true | false 是true
短路的逻辑运算
&&,||//只接受boolean类型的变量
先看左侧的表达式的值,如果第一个可以判断整个逻辑运算的真假,第二个逻辑运算不执行
三元运算符
a?b:c
Eg:a?4:4.5 //整个表达式的类型是double 编译的时候就需要知道类型
如果a为真时,返回4.0
④包与编译
解决命名冲突的问题
package a;
//子包package a.b.c;
class Student {
}
其他类里面访问
import a.b.c.Student;
import a.b.c.Dog;
//import a.b.c.*;//导入该包下的所有类
//Java Javax 不可用于报名开头
void a() {
sl = new Student();
}
类名冲突
import java.sql.*
用全名
javac -d d:\ 编译的时候源文件生成放在哪
包名变成文件夹的名字,类名变成java文件的名字
不加-d在编译的时候如果源文件里面引入包的话,丢失包信息
package 的信息
类名是公开类的话,源文件的名字要和类名一致
javac -d d:\java *.java //编译java文件夹下所有java文件
java -cp //类的路径,可以加上绝对路径,方便找到类的位置
notepad //path变量里面存了 notepad 记事本
包名全部用小写
-d . 当前目录
jar 文件
.jar
jar
⑤继承
class Employee {
String id;
String name;
float salary;
public void work(){
;
}
}
//只有一种继承方式,子类继承父类的一切特征,
//单一继承,一个类的父类只有一个,不声明的时候,默认继承object
//所有的类都是直接或者间接继承Object
//语言包中类自动导入,不需要再次导入
//import java.lang.*;
class ProjectManager extents Employee{
}
⑥访问权限
private,public,protected
package a;
class Student {
private int age;//只能在类里面访问
}
同包权限,不声明任何权限,默认是同包,同一个包下可以访问
//protected 同包可以用
public class Teacher {
protected
}
子类通过继承访问父类的protected成员变量,子类通过子类的类型访问,即子类的成员函数访问
不可以直接对父类的成员进行访问
⑦修饰符
final,static
final 常量
public class Student {
final int i;//wrong,必须赋值
final int i=0;//对,必须赋值
void student(){
final int i;
i = 3;//只可以赋值一次
}
}
final 修饰类 没有子类
final 修饰函数 ,在子类里面不可修改,即不可多态
static 仅仅依附于类,与成员函数无关
访问静态成员,直接用类名加.
也可以引用变量来访问类的静态成员,但是不建议这样写
全局静态常量
public final static int i;
静态函数不可以访问非静态的函数
非静态函数可以访问静态的函数