我的Java笔记(张龙视频)

时间:2022-04-21 16:41:41

1,、开始学java的编辑本:notepad,edit,再为gvim,再用Eclipse,循序渐进。

 

2、字节码byte(-128~127),1byte=8bit(0,1)。

 

3、面向程序设计的三大基本特征:继承,封装,多态。

 

4、方法不能嵌套,只能定义在类中。

 

5、java源程序 /说明

      package语句 /包声明,只能一个,类的存放

      import语句 /引入类的声明语句,可以没有或多句

      public class{类定义} /公有类的定义,只能一个

      class{类定义} /类的定义

      。。。。

      interface{接口定义} /接口定义

 

6、规范的标识符(非强制性)

 a,变量名和方法名第一个符号用字母,且小写;类名和接口名首字母大写。

 b、常量名完全大写,MAX_SIZE。

 c、方法名用动词,类名接口名用名词。

 d、变量名应有一定意义,尽量不使用单个字母。

 

7、数据类型:基本数据类型/原生数据类型8个(int,float。。。),复合数据类型(类,数组,接口)

 

8、长整型常量的表示数后加 l 或L,如0.44L

 

9、浮点型默认为双精度的,除非后面加f,单精度定义后面也带f,如3.14f

 

10、取模可以为浮点型,如9.5%3=0.5,余数符号跟被除数相同;

 

11、“+”可以连接字符串,如“peter”+“tom”,System.out.println("j="+"j");

 

12、class是关键字,声明后面的类,前面可以有多个修饰符,用来限定类的使用方式。

 

13、extends是关键字,若所定义的类是从某一父类派生而来,则父类名字应写在estends之后,如修饰符 class 类名【extends 父类】,也可以不指明,默认是object,object是java所有类的父类,唯一没有父类的的类。

 

14、java文件名必须与java文件中的公有类的类名相同,要区分大小的;

 

15、类名如果由多个字母组成时,不能用连接符且每个单词第一个字母大写,如MemberTest

 

16、方法首字母小写,从第二个单词开始每个单词首字母大写,如addThreeLin,属性(成员变量)命名也一样,而 方法中的变量为局部变量

 

17、成员变量与局部变量都要声明,但成员变量可以不初始化,默认为0或flase

 

18、length可以指明数组x所含的个数,如x.length

 

19、将数据和方法放在一个类中就构成封装

 

20、用反斜杠加双引号表示保留字符双引号‘ ” ’

 

21、构造方法(构造器)没有返回值,名字与类名相同,可以多个,可以互相调用,可以重载,当一个构造方法调用另外一个时可以引用this(),括号里面为目标构造方法的参数,而且必须放在第一条代码。

 

22、java根据参数(类型)来调用适当的方法

 

23、方法的重载:方法名相同,参数表不同;

 

24、方法的重载:同一个方法名,不同的参数列表,重载的方法在同一个类;方法的覆盖:同一个方法名,相同的  参数列表,覆盖  的方法分别属于不同的父类、子类,覆盖方法不能比被覆盖方法访问域窄。

 

25、static可以被该类所有对象共享,相当于全局变量;即无论一个类生成多少对象,这些对象共同使用唯一的一份静态变量,任何静态成员变量发生改变,其他的静态成员变量也跟着改变,并且可以用类名.成员变量的方式来使用它(java建议这样使用),静态方法只能继承不能重写(override)

static代码块(静态代码块):完成一些初始化工作,先执行静态代码块再执行构造方法,每个类只执行一次,而构造方法每次生成对象时都执行一次,静态方法只能访问静态变量,非静态的可以访问一切,不能再静态方法中使用this

 

26、final修饰的类不能派生子类(被继承),最底层;修饰方法时,不能被重写;修饰属性时,不能被改写(常量),当修饰的是原生数据时,值不能变化,当修饰引用类型时,表示该引用类型不能指向其他对象了,但该引用所指向的对象的内容可以改变;声明变量要赋初值,或在构造方法中赋上;

 

27、声明包的语句用一句且必须是文件的第一条语句

 

28、Throwable包括exception和error,exception类是所有异常类的父类,error类是所有错误类的父类

 

29、new后面的小括号()表示构造方法的参数列表,他的参数要与构造方法的参数一致(数量、类型、顺序)

 

30、一定要有main方法才能运行,但不一定每个类都有

 

31、如果一个类包含属性和方法,那么该类的每一个对象都具有自己的属性,但这些对象只共享一个方法

 

32、在栈中可以直接分配内存的数据是基本数据类型,传值(数据)。 

    引用数据类型:是数据的引用在栈中,但是他的对象在堆中,传值(地址的值)

 

33、参数传递的时候,如果参数是引用类型,那么传的是地址,接下来这个定义的变量p(Person p=new Person())要跟着改变;如果是原生数据类型,那么是传一个具体的值(int a=1;),1传过去,但a还是没变(圣思园十五讲)

 

34、方法重载:多个方法名相同但参数个数或类型不同(方法返回值对重载没有影响!!{即定义重载方法时定义返回类型是无意义的,应该让参数类型不同才可,见圣思园16讲最后}),只需看参数

 

35、继承:子类方法不能比父类方法的访问权更严格,当生成子类对象时,java默认先调用父类不带参数的构造方法,生成父类对象再成子类对象;父类有的,子类也有,也可以改变或增加

 

36、super表示对父类对象的引用,如果子类使用super()调用父类的某个构造方法,那么在执行时就会调用该方法而不会再寻找父类的不带参数的构造方法,且必须放在第一条代码,跟this()一样

 

37、构造方法不能被继承(可调用),方法和属性可以被继承

 

38、方法重写/覆盖发生在父类与子类之间,重载发生在一个类的内部

 

39、2个方法形成重写时,可以在子类中用super.run()引用父类的方法,其中super.run()不必放在第一句,因为此时父类对象已经构造完毕

 

40、多态:父有子有(覆盖),父无子可增,父无子无,编译错误

    向上转型:子类对象赋给父类引用变量

    如:C a = new B();C为编译类型,B为运行类型,结果a像子类的行为

    与方法不同的是,对象的属性没有多态性,即属性总是输出C的属性而不是B。

 

41、对象的抽象就是类,类的具体化就是对象

 

42、包名是有效标识符即可,一般用小写字母

 

43、接口只能定义属性常量,方法必须是抽象类,接口里的方法都是public,所以子类也至少是public,接口可以多继承(解决类单继承的问题)

 

44、如果知道某事物是一个基类,那么第一选择应该使它成为接口,如果强制你必须要有具体方法和成员变量时,才选择抽象类或必要时使它成为一个具体类

 

45、接口是不能用new 实例化的,但可以声明接口变量(Connection、statement是接口)

Connection conn=DriverManager.getConnection(url,name,password); statement st=conn.CreateStatement();

是返回了一个实现了Connection statement接口的类的对象,这样是行的。

 

46、含有抽象方法的类就是抽象类,但抽象类不一定含有抽象方法,且不能实例化,子类必须实现抽象父类的所有抽象方法才能实例化,不能有抽象构造函数或抽象静态方法

 

47、多态:一个对象变量可以引用多种实际类型的现象

          动态绑定:在运行时能自动选择调用哪个方法的现象。1.对于变量(不管静态变量还是实例变量),都是静态绑定,静态绑定对应声明的对象变量类型。(编译时)2.而对于方法,private、static、final方法是静态绑定,其他的都为动态绑定,动态绑定对应对象类型

48、一个类不能既是abstract又是final,因为abstract目的是要被继承,而final不能被继承

49、不带修饰符的变量或方法在相同包下的类才可以被引用
protected修饰的变量或方法被相同包,同一个类,子类所访问
private只能在类里面被访问,public被所有类访问

50、instanceof:判断某个对象是否是某个类的实例,语法:引用名 instanceof 类名(接口名)返回一个boolean值;
    A a = new B();即a instanceof B或a instanceof A都返回true;

51、equals是Object中的方法,返回一个boolean值,形式:a.equals(b),等价于==;
String中重写了equals的方法,对于字符串相等判断来说,请使用equals而不是用==

52、String是常量,一旦被创建就无法被改变

53、编译器自动调用java.lang包

54、final声明常量时经常有static搭配,eg:public static final MAX=1;这样每个对象的实例都会访问唯一的一份常量值

55、Arraylist底层是采用数组实现,当生成Arraylist对象时,默认是生成一个Object的长度为10的数组

56、集合中放置的都是Object类型,因此取出来后要将它转换为真正的类型

57、LinkedList底层采用链表,因此进行删除时比Arraylist效率高,但查询元素索引时就比较低

58、当向ArrayList添加对象时,实际是将该对象放置到Arraylist底层所维护的数组中;而LinkedList内部会生成一个Entry对象,该对象结构为:Entry{Entry previous;Object elements;Entry next;}。其中类型为Object的对象就是我们向LinkedList添加的元素。LinkedList中所维护的是一个个Entry对象

59、set不添加重复的元素,当调用Hashset的add()方法时,会自动调用hashCode()和equals()方法来判断是否添加新对象,如果hash code值不同,则加进去。否则调用equals()方法比较,如果返回true,则不会加进去,否则加进去。

60、(1)、Collection(集合)的各子类:

List(实现类:ArrayList,LinkedList)

Set(HashSet)

SortedSet(TreeSet)

(2)、map(映射):(实现类:HashMap)


sortedmap(TreeMap)

(3)、Collections包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架

61,synchronized关键字修饰一个方法时,该方法叫做同步方法。

Java中每个对象都有一个锁(lock)或叫做监视器(monitor),当访问某个对象的synchronized方法时,表示该对象上锁,此时其他线程无法访问该synchronized方法了,直到之前那个线程执行完或者抛出异常,那么将该对象的锁释放掉,其他线程才有可能访问该synchronized方法。

若一个对象有多个synchronized方法,在某个时刻某个线程访问进入某个synchronized方法,则在该方法没执行完之前,其他线程无法访问该对象的任何synchronized方法