个人Java基础学习整合

  

第一章:

第一代语言:打孔机

第二代语言:汇编

第三代: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只有方法的声明的时候(只能是抽象方法并且是pubicpublic static finalpubic都是默认的可以不修饰在里面,就可以吧这个类定义为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里面,除了基础数据类型,就只有引用类型。

数组的动态初始化:

         数组定义和数组空间以及赋值操作分开

数组的静态初始化:

         数组定义的同时就为数组分配空间和赋值。

  1. 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学习部分基础知识,欢迎改正和指导。

谢谢浏览

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值