基础
开发JAVA程序的步骤
jdk->jre->源程序编写->编译->执行目标文件
语法
变量、数据类型和运算符
常用数据类型
Byte(1字节=8bite,0),short(2,0)int(4,0),long(8,0)
Float(4,0.0f,(符号位+指数位+小数部分)),double(8,0.0d)(小数默认是double型)
Char(2,16进制表示,uniocde编码),String(类)
Boolean(1)(false默认值)
String a=”12”;
Integer num
\r回车 \n回车换行 \t空格(指定了占八个空格)
一个汉字字符占2个字节,一个英文字符占一个字节
测试程序:
System.out.println(“... \t...”);//我欠额为
System.out.println(“\t...\t”);//yi;.... Yi
修饰符
修饰符 |
本类 |
不同包的子孙类子孙类 |
同包的子孙类 |
同一包 |
其它包 |
public |
√ |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
√ |
× |
默认 |
√ |
× |
√ |
√ |
× |
private |
√ |
× |
× |
× |
× |
static方法传进去的变量只能是static变量,里面的变量可以是普通变量
static方法中不能使用this方式比如:
public class ss{ow
public void show(){}
public static void main(String []args){
this.show();
}
}
public class Demo {
public static String ll = "";
public int age;
public void show(){
ll = 11+"";
System.out.println(ll);
} //普通方法中能使用静态变量
// public void getName(){
// static int uu;
//
// }//普通方法中不能声明静态变量
public static void getAge(){
System.out.println(age);
}静态方法中能使用普通变量
public static void main(String[] args){
Demo.ll = " ll";
System.out.println( Demo.ll);
}
}
static 和final的区别在于static 是作用域控制符,final是变量、类内容控制符
static代码块在类进行第一次实例化的时候就会加载运行,以后再次进行初始化类时不再运行。
非静态代码块在静态代码块后面执行,每次创建新对象的时候都会运行一次。
构造器在静态代码块后面运行
final(终态)
final类
不希望某个类被继承时用final,比如
public final class ff{
}同时,final类只能实例化一次
为什么要使用内部类?
当一个事物和另一个事物内外相通时,可以使用内部类,以保证内外相通。
1,在类里面定义类
2.在类外面定义类(同一个类里)
final方法
final方法不能被重写
比如final String name(String name){
return name;
}
final常量
基本数据类型和类类型不可变,但如果装的是容器类型,就可以变了
字符串
String
charAt()是找出字符串中指定索引位置的字符
indexof()是找出字符串中指定字符的索引位置
subString() 截取指定位置
String.getBoolean之前先要用setProperty(String,value(String));问题,如果里面的value值不是true/false
==比较的是两端的地址是否相同,equals比较的是引用对象里面的内容。
String s1=”monday”;
String s2=”monday”;
System.out.println(s1==s2);
上述程序输出结果是true,说明s1和s2引用的是同一个对象”monday”
String a="a";和String b="a";的地址是相同的。两个都是在堆区,栈区引用了地址。
String c=new String("a"); String d = new String("a");的地址是不一样的。俩个都在堆区
0-9的字符减48得到ASCALL
Integer.parseInt(String) 字符串中数字化为int
Boolean.parseBoolean(String)
a.spilt(String ob):String[]
从String a中找到ob,如果有ob就拆字符串,如果没有就不拆字符串。
(、{、【、^、-、**】})、?、+、*、、.15个字符属于特殊字符,转义需要用\\。
trim()返回的是去掉字符串前后空格的副本。
StringBuffer
4个构造函数
StringBuffer()
StringBuffer(String)
StringBuffer(CharSequence ch)
StringBuffer(int long)
switch
Switch(conditions){
Case 值1:
Default:
}
当某个值等于case中的值时,就会一直执行下面的语句。知道遇到break为止。
异常
throw/手动抛出异常
throws自动抛出异常
Finally块
1,try里面有return语句不会影响finally块的执行
2,finally块里面的return会覆盖try里面的return
3,try里面的变量b,return b;然后在finally中对finally执行,返回的依然是try块里面的b。但b已经改变了。
javaError和Exception区别
Error类和Exception类都继承自Throwable类。s
Error的继承关系:
Exception的继承关系:
二者的不同之处:
Exception:
1.可以是可被控制(checked) 或不可控制的(unchecked)。
2.表示一个由程序员导致的错误。
3.应该在应用程序级被处理。
Error:
1.总是不可控制的(unchecked)。
2.经常用来用于表示系统错误或低层资源的错误。
3.如何可能的话,应该在系统级被捕捉。
Java 中定义了两类异常:
1) Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。
2) Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是非凡的,它们 不能通过client code来试图解决,所以称为Unchecked exception 。
Java 中异常类的继承关系图:
本地方法
在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。
public class BeautifyChild extends Beautify implements NativeTest{
public void name() {
}
native public void getname();
native void getname1();
native public void Native1( int x ) ;
native static public long Native2() ;
native synchronized private float Native3( Object o ) ;
native void Native4( int[] ary ) throws Exception ;
}
常用Math类方法
random();产生0<=x ,x>1的随机数。
round(x);计算x的四舍五入整数
sqrt(x)计算x的平方根
pow(底数,指数)
注解
@override表示方法重写
@deprecated表示方法弃用
@SuppressWarnings表示被批注的代码段
不再提示警告
使用Ctrl+/进行多行注释
使用/**/段落注释可以注释方法,变量意思
JVM
栈内存:
调用方法时在方法中声明的变量(基本类型)
堆内存:
一般放的是new出来的对象(引用类型)
方法区:
一般放的是加载类的信息
静态变量,常量
本地方法栈
程序计数器
反射机制
object.getClass()返回的值是一个字符串,它的内容是"class"+" "+包+"."+类名
System.out.println(Class.class.getClass().getResource("/").getPath());//获得当前文件路径
Class类—可获取类和类的成员信息
//Class.forName()得到对象
Class clazz=Class.forName("java.lang.String");
Field类—可访问类的属性
Method类—可调用类的方法
Constructor类—可调用类的构造方法
//获取对象的结构信息
Field fields[ ] = clazz.getDeclaredFields();
Method methods[] = clazz.getDeclaredMethods();
Constructor constructors[ ] = clazz.getDeclaredConstructors();
接口
接口中的变量没有声明类型的默认是静态常量。//声明了变量类型的也是静态常量。
modify是private会报错
即所有变量都是全局静态常量。
所有的方法都是全局抽象方法。
线程
notify()方法是唤醒一个等待的线程
进程
public static void main(String[] args) { openWinExe(); openExe(); } //用Java调用windows系统的exe文件,比如notepad,calc之类 public static void openWinExe() { Runtime rn = Runtime.getRuntime(); Process p = null; try { String command = "notepad"; p = rn.exec(command); } catch (Exception e) { System.out.println("Error win exec!"); } } //调用其他的可执行文件,例如:自己制作的exe,或是下载安装的软件. public static void openExe() { Runtime rn = Runtime.getRuntime(); Process p = null; try { p = rn.exec("\"D:/QQ2010.exe\""); } catch (Exception e) { System.out.println("Error exec!"); } }
执行bat文件
集合
set、list、map都是接口
instanceof语句用法 object instanceof class 。判断object是不是class的子类对象。返回true/false