第一章:
1.java跨平台原理
由java虚拟机(jvm)负责java程序在系统中的运行,能独立解析java程序
2.JRE,JDK
jre:包含java虚拟机,java运行环境
jdk:包含jre,java开发环境
3.java环境变量配置
为了在任何地方可以使用java,在环境变量中配置路径。
(1)直接在系统环境变量--CLASSPATH中配置jdk下的bin目录:如D:\jdk1.7\bin
缺点:jdk所在位置或文件名修改时classpath也要修改,修改CLASSPATH容易出错。
(2)先新建java_home,将路径中会改变的部分提取出,然后在CLASSPATH中配置%Java_Home%\bin;
优点:当jdk路径变化时,只需修改Java_Home,不需要修改CLASSPATH
第二章:
1.java关键字:
2.进制间转换
十进制->二进制:对n除2取余,由下到上。
二进制->十进制:每一位乘以2的(n-1)次方相加
110 -->: 0*2^(0)+1*2^(1)+1*2^(2)=0+2+4=6;
3.java基本数据类型(8种)
byte,short,int ,long,double,float,boolean,char
4.转义字符
\n:换行;\b:退格,相当于backspace
\r:按下回车键;\t:制表符,相当于tab键
5.循环中for和while
for和while可以互换,使用for循环定义的增量在语句结束时被释放。
while定义的变量执行完成依旧存在内存中。
/**
* 九九乘法表*/
public static void main(String[] args) {
for (int x = 1; x <=9; x++) {
for (int y = 1; y <=x; y++) {
System.out.print(y+"*"+x+"="+y*x+" ");
}
System.out.println();
}
6.break和continue语句
(1)beak:
public static void main(String[] args) {
w: for (int i = 0; i < 3; i++) {
q: for (int j = 0; j < 4; j++) {
System.out.println("i="+i);
break w;
}
}
}
w和q是给循环起的别名,break默认结束的是所在的循环体。
break w 指定结束外层循环。
输出:i=0
(2)continue:只能作用于循环结构,特点:结束本次循环开始下一次循环
for (int x = 1; x <=10; x++) {
if(x%2 ==1){
continue;
}
System.out.println("x="+x);
}
输出:打印出偶数
x=2
x=4
x=6
x=8
x=10
7.数组
(1)选择排序,前一位和后面所有位 依次比较,符合条件则换位
//选择排序
int [] arr = {1,9,4,8,5,9,3};
for (int x = 0; x < arr.length-1; x++) {
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
int z=arr[x];
arr[x]=arr[y];
arr[y]=z;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
输出:1,3,4,5,8,9,9
(2)冒泡排序:相邻位互相比较,符合条件则换位
//冒泡排序
int [] arr = {1,9,4,8,5,9,3};
for (int i = 0; i < arr.length-1; i++) {
//-i:让每次比较的元素减少;-1:避免角标越界
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
(3)
Arrays.sort(arr);//import java.util.Arrays;java提供的数据排序方法
8.面向对象
(1)封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装原则:将不需要对外提供的内容隐藏以来;
把属性都隐藏,提供公共方法访问。
(2)构造函数
对象一建立就会调用与之对应的构造函数。
作用:用于给对象进行初始化;
(2)构造代码块
{
构造代码块执行语句.
}
作用:用于给对象进行初始化;定义的是不同对象共性的初始化内容。
对象一建立就运行,优先于构造函数执行。
和构造函数区别:
构造代码块给所有对象进行统一初始化;
构造函数给对应的对象初始化(如有参和无参初始化不同的对象)
9.java关键字
(1)static(静态)关键字:
static String country="CN";
特点:1.随着类加载而加载;2.优先于对象的存在(静态先存在,对象后存在);
3.被所有对象所共享(当对象中出现共享数据使用静态修饰); 4.可以直接被类名所调用.
实例变量和类变量的区别:
类变量(静态变量))随着类的加载而存在于方法区中;
实例变量随着对象的建立存在于堆内存中;
静态使用注意事项:
1.静态方法只能访问静态成员;
2.静态方法中不可以定义this,super关键字.因为静态优先于对象存在.
3.主函数是静态的
静态代码块:
static{
静态代码块中的执行语句.
}
特点:随着类的加载而执行,只执行一次(优先于主函数执行),用于给类进行初始化的
(2)final关键字
可以修饰类、函数、变量,被final修饰的类不可以被继承;
被final修饰的方法不可以被复写;
被final修饰的变量是个常量只可以赋值一次,可以修饰成员变量,也可以修改局部变量(作为常量,所有字母大写,多个单词由_连接 final double PI=3.14;)
10.对象的初始化过程
Person p = new Person("hello",20);
初始化都做了哪些事情:
1.因为new用到了Person.class,先找到Person.class文件并加载到内存中;
2.执行该类中静态代码块
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的特有属性,进行默认初始化
5.对属性进行显示初始化
6.对对象进行构造代码块初始化
7.对对象进行对应的构造函数初始化
8.将内存地址赋给栈内存中的p变量
11.单例设计模式
单例设计模式:解决一个类在内存中只存在一个对象.
如何保证对象唯一:
1.为了避免其他程序过多建立该类对象,先禁止其他程序建立.(将构造函数私有化);
private Student() {}
2.为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象(在类中创建一个本类对象);
private static Student s = new Student();
3.为了方便其他程序对自定义对象的访问,对外提供访问方法.(提供方法可以获取到该对象)
public Static Student returnStudent(){
returen s;
)
饿汉式:先初始化对象,类一进内存就已经创建好了对象.
private static Person p = new Person();
public Static Person returnPerson (){
returen p;
)
懒汉式:对象在方法调用时才初始化,也称对象的延时加载..类进入内存对象还没有存在,只有调用方式才建立对象.
懒汉式可能存在new多个对象的情况,一般加锁(synchronized)来处理.
加锁情况处理:
private static Prerson p = null;
public static Person getInstance(){
if(p==null){
synchronized(Person.class){
if(p==null)
p=new Person();
}
}
return p;
}
12.模板方式设计模式
模板方法:在定义功能时,功能的一部分是确定的,有一部分不确定,而确定的部分在使用不确定的部分。此时可以将不确定的部分暴露出去,由该类的子类去完成。
abstract class getTime(){ public final void getTime(){ long start= System.currentTimeMillis(); runcode(); long end=System.currentTimeMillis(); System.out.println(end-start); } public abstract void runcode(); }
13.接口
interface用于定义接口;接口中的成员都是public的
接口中的成员都有固定修饰符:
常量:(public static final) int NUM=3;
方法:(public abstract) void show();