第一章:
第一代语言:打孔机
第二代语言:汇编
第三代:C++面向过程/面向对象
java跨平台的纯面向对象的语言
NET跨语言的平台
Java语言特点:一次编写,到处运行;面向对象;平台无关性;健壮性;
Java配置:path:系统执行命令时需要的路径
Classpath:在编译和运行时需要找class所在的路径
第一个程序HelloWorld
Public class HelloWorld{
Public static void main (String [] args){
System.out.println(“HelloWorld”);
//输出HelloWorld
}
}
约定俗成格式:
大括号对齐
遇括号缩进,用tab键
代码块之间加空行
并排语句加空格
运算符两侧加空格
{左边加空格
成对编程
类名和文件名要匹配
只有双引号包起来的内容会原封不动的打印出来;
格式编排:遇见大括号缩进四个空格;
第二章:
标识符:java对各种变量,方法,类等要素命名时使用的字符序列称为标识符
Java标识符需要见名知意
变量:最基本的存储单元,要素(变量名,变量类型,作用)
特殊字符“+”,空格等等不能出现在变量中,变量名中所有字符都是有意义的,而且大小写敏感。不能用保留字作为变量名。变量声明后必须用赋值语句对变量进行显式初始化。
****常量:用final修饰的变量只能被赋值一次,一旦赋值就不能再被就改。约定俗成变量名使用全大写。
****类常量:用static final 修饰设置一个类常量,位于main()方法外部可以在一个类多个方法使用。
用public static final 修饰变量,则其他类的方法也可以使用这个常量。
程序执行过程
基本数据类型:四类八种
逻辑行:boolean(true,flase)
字符型:char(Unicode编码)
整型:byte,short,int, long
浮点类型:double,float
细节:java里面if(x=0),不能编译通过,因为x=0不能转换为boolean类型,而if语句只能判断boolean类变量
引用数据类型:如Date deta = new Date();这个date就是引用数据类型。
数据转换:容量小的数据类型自动转换为容量大的数据类型。
(char,short,byte)类型数据计算时自动转化成int计算。
(char,short,byte)转short转int转long转float转double自动转换,反过来需要加上强制转换符。
运算符:
++在前先加后取值,在后先取值后加。
用短路与&&,短路或||逻辑运算符的时候 当左边的运算可以得出结果的时候,右边就不再计算,&&优先级比||高。
a *= b ——> a = a*b
字符串连接运算符 +
(当进行打印时,都转换成字符串打印)
三目条件运算符:X?Y:Z 先计算x是否是true,是则结果是Y,否则结果是Z
语句:
条件语句if else(大括号{}只执行一句语句的时候可以省略{})
if….else if…..else if……else;
循环语句
For(int i = 1;I <= 10; i++){......;};
While{
......;
};
Do{
......;
}While();
// break强行退出循环
// continue用于终止某一次循环
switch(探测int类型的值){
case XX:....;
break;
case XX:....;
break;
default:
}//break防止case穿透。
方法:
[修饰符] 方法名 (形式参数) {
(由形式参数传过来的是实参)
}
//没有返回值的方法在方法需要添加void,如public void method(){};
//return,结束方法执行,并且返回值。
构造方法(与类同名且没有返回值);
New的时候调用的就是构造方法。可以调用有参构造方法,也可以调用无参构造方法。
编译器自动添加无参构造函数XXX(){}
类:
类里面包含静态变量和动态方法,
类的定义主要有两方面组成->成员变量和方法。
类之间的关系:聚合关系,组合关系;继承关系,关联关系,实现关系;
局部变量必须声明和初始赋值;
成员变量声明了如果不赋值,则为默认值。
Java面向对象之引用:
对象的创建
String s ;// 声明了一个String类型的引用变量s,但是并没有使它指向一个对象
S = new String (”hello world !“) ;//使用new语句创建了一个String类型的对象并使用s指向它,以后可以通过对s完 //成对其的操作new出来的放在堆内存
局部变量放在Stack栈里面。
New出来的对象放在heap堆里面。
代码,也包括代码里面的方法放在code segment 。
静态变量和字符串常量放在data segment 。
方法是静态的代码,只有在执行的时候才在内存分配空间。
C1是对象的引用,是局部变量,放在stack栈里面;
C是一个对象,拥有i和j两个成员变量,放在heap堆;
方法调用完毕,为局部变量分配的空间立马消失,而它做指向的对象不会马上在堆内存里面马上消失。
命名约定俗成规则:
类名首字母大写
变量名方法名首字母应当小写
驼峰命名法
方法重载与重写:
重写方法的规则:
1. 参数列表:必须与被重写方法的参数列表完全匹配。
2. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同
3. 访问级别:一定不能比被重写方法强,可以比被重写方法的弱。
4. 非检查异常:重写方法可以抛出任何非检查的异常,无论被重写方法是否声明了该异常。
5. 检查异常:重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常
6. 不能重写标志为final,static的方法
重载方法的规则:
1. 参数列表:被重载的方法必须改变参数列表。
2. 返回类型:可以改变返回类型。
3. 修饰符:可以改变修饰符
4. 异常:可以声明新的或者更广泛的异常。
重写的解释(Overriding)
(1)父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某
方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,
子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不
动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又
称方法覆盖。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,
则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键
字引用了当前类的父类。
(3)子类函数的访问修饰权限不能少于父类的;
总结:重载和重写(覆盖)。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写
Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性
的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法
被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而
言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和
父类相同,那么子类的返回值类型必须和父类的相同;如果在一个类中定义了多个同
名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
(Overloading)。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回
值类型可以相同也可以不同。
static关键字和this关键字:
直接用类名访问static变量。
This解决变量重名的混淆。This是当前对象的引用
Super关键字:调用父类的变量和方法。子类可以在自己的构造方法这中使用Super(参数列表)调用基类的构造方法。This(参数列表)调用自己类的构造方法。如果调用了Super,必须写在子类构造方法的第一行。
Package和import语句:
Packge必须写在第一行。Packge pkt1.[pkt2.[pkt3……]];必须保证这个类位于正确的目录下面。
JDK提供的常用类,API文档。
打包操作:jar –cvf xx.jar * ; xx.jar是将文件打包到xx.jar压缩包里面。*代表打包的文件时当前目录下所有文件。打包在package最上层的父目录下面,然后可以配置classpath路径到package上层目录的父目录,就可以在任何地方访问xx.jar里面的类。
继承:子类对象包含父类对象。Extends
继承:子类拥有父类私有变量所有权,没有使用权。
子类可以重写继承自父类的方法,方法名,参数列表。返回值类型必须相同,且不能增加更严格的访问控制权
当我们使用ToString(),和equals()方法时,最好根据用户自身重写这两个方法。
Instanceof比较当前对象是否是某类或某类子类的对象。cat instanceof Cat ;
对象转型:父类引用指向子类对象,只能访问(看到)从父类继承的属性和方法。不能访问子类新增加的成员,包括属性和方法//上转型
吧a对象强制转换成Dog对象----》Dog dog = (Dog)a ;//强制转换或者叫下转型;
举例子:class Animal()
Class Dog()
Animal a = new dog() ;//上转型对象
Dog b =(Dog)a;//下转型对象和强制转换
动态绑定:当用父类引用(父类引用指向子类对象)调用某方法的时候,父类子类都有这个方法,这是根据实际情况来确定,比如,你是一只猫是猫类,父类是动物类,Cat c = new Cat();
当你运用Animal来访问方法的时候,会调用实际中Cat的这个方法。//new 的是谁,就调用谁的重写那个的方法。这个动态绑定是运行期间。
多态:1.要有继承
2.要有重写
3.要有父类引用指向子类对象。
abstract抽象方法:一般情况下,父类的方法被子类继承过后,都会被重写,所以,在父类的这个方法里面的方法体就不会被用到,这里就引出抽象方法,abstract void t(){},就像这个,只需要声明,不需要实现。抽象类必须被继承,在子类继承的时候必须重写抽象方法,同时,父类必须用abstract修饰,名为抽象类。抽象类不能被实例化(new出新的对象)。从抽象类也可以继承非抽象方法
Final:
声明的变量不能被改变;
修饰的方法不能被重写;
修饰的类不能被继承;
接口:为了解决java单继承的问题,用接口可以封装多继承。是一种特殊的抽象类,当一个类只含有不可变的常量(public static final)和只有方法的声明的时候(只能是抽象方法并且是pubic),public static final和pubic都是默认的可以不修饰在里面,就可以吧这个类定义为interface,变成接口,用interface替换原来的class。用关键字implements xx 引入某个接口。一个类可以实现多个无关的接口,一个接口也可以被多各类实现 ,多继承就是体现在这儿。因为接口里面的方法全部默认且必须是抽象方法,所以被这个接口实现的类必须重写里面所有的方法。
接口可以继承接口,且在子接口不用重写方法。
第四章:异常初步
检查运行期出现的错误,
异常:throwable —》》》Error
—》》》Exception—》》特殊异常(RuntimeException);
特殊异常非必须捕获;
Thorws抛出异常。能处理的异常尽量处理,不能处理就往外抛出。
Try{
......; //代码块儿
} catch(exception e1){
......; //代码块儿
} catch(exception e2){
......; //代码块儿
} finally{
......; //代码块儿
} //finally 不管有没有异常,都会执行;异常处理的出口,一般在这里进行资源的清理工作;
基类异常不可以写在子类异常的前面;
重写方法需要抛出异常或者不抛出异常;
通过继承java.lang.Exception类声明自己的异常类;在方法合适的位置生成自定义异常的实例,并且用throw语句抛出,在方法的声明部分用thorws语句声明该方法可能抛出的异常。
数组
在java里面,除了基础数据类型,就只有引用类型。
数组的动态初始化:
数组定义和数组空间以及赋值操作分开
数组的静态初始化:
数组定义的同时就为数组分配空间和赋值。
- length可以得到数组的长度。
有了数组之后,就可以设计一系列的算法了
排序算法:
搜索算法:往往是建立在排好序的基础上。
String类,StringBuffer类:
程序举例子:
Math类:
File类:
递归理解:
在方法里面调用本方法;
Enum枚举类型:只能取特定值中的一个;
使用enum关键字;
Java.lang.Enum ;
例子:public enum Myclor (red,green,blue );
容器:
Set:没有顺序。不可重复
List:有顺序。可重复(equls);
Collection C = new ArryList();
C.add(Object o);里面添加的只能是对象
两个对象equals,那么他们应该有相同的hashCode;重写equals方法必须重写hashCode方法;
Iterator迭代器:
————举例:
增强的for循环:不方便访问和删除某一个下标的值,在内部调用iterator;
for(Object 0 : c){
system.out.println(o);
}
Map接口:
通过hashCode比较键值;
泛型:
实例Comparable运用泛型:
1136:一图一类三个知识点六个接口
IO:
字节流 InputStream Outputstream
字符流 Writer Reader (单位16bit )
读文件检测FileNotFoundException
操作文件检测IOException(输入,输出的异常错误。)
线程的 基本概念
进程:一个进程可以有多个线程。
线程:java.lang.Thread类来实现;线程启动调用由有两种方法;从Thread继承或者从Runnable接口。(查看API文档)
Runnable 接口从实现了Thread的Run方法,如果要调用Thread的其他方法,可以用Tread.方法名();调用。如Thread.Sleep(1000);必须捕获InterruptedException异常;
优先级
线程同步:
线程死锁:
This.notify()叫醒一个正在wait();在我这个对象上的线程
线程死锁举例:
public class Runner3 implements Runnable{
static Object o1 = new Object(),o2 = new Object();//创建两个对象
int flag = 0 ;//标志位
public void run(){
if(flag == 0){
synchronized(o1){
try{
Thread.sleep(5000);
} catch(Exception e){;}
synchronized(o2){
System.out.println("++++"+flag);
}
}
}
if(flag == 1){
synchronized(o2){
try{
Thread.sleep(5000);
} catch(Exception e){;}
synchronized(o1){
System.out.println( "---"+flag);
}
}
}
}
public static void main(String[] args){
Runner3 t1 = new Runner3();//创建一个线程t1
Runner3 t2 = new Runner3();//创建一个线程t2
t1.flag = 0 ;//设置标志位
t2.flag = 1 ;//设置标志位
new Thread(t1).start();//开启线程t1
new Thread(t2).start();//开启线程t2
}
}
程序将产生死锁,不会有任何输出
以上内容我整理的Java学习部分基础知识,欢迎改正和指导。
谢谢浏览