zoukankan      html  css  js  c++  java
  • 学习笔记-java核心技术卷一

    整理下core of java

    第三章、java的基本程序设计结构

    一个简单的java应用程序

    一个简单的java应用程序,概览下java的语法

    public class FirstSample
    {
       public static void main(String[] args)
       {
          System.out.println("We will not use 'Hello, World!'");
       }
    }
    1. java对大小写敏感
    2. 关键字public :访问修饰符,用于控制程序的其他部分对于这部分代码的访问级别
    3. 关键字class:java程序中的全部内容都包含在类中,java程序的所有内容都应该放置在类中
    4. class后紧跟类名,类名的命名格式:以大写字母开头的名次,使用骆驼命名法,是数字和字母的组合
    5. 源文件的文件名必须与公共类的文件名相同,并以.java做扩展名
    6. 运行编译程序时,java虚拟机从指定类的main方法开始执行,每一个java程序都必须要有一个main方法
    7. java用{}花括号划分程序的各个块,任何方法的代码都以{开始,用}结束,我们一般会把匹配的花括号上下对齐,java执行忽略空格符号
    8. 每个句子必须用分号;结束,回车不是结束标志,因此需要时可以将一条语句写在多行上
    9. java的通用语法是:object.method(parameter)等价于于函数调用,点号用于调用方法
    10. java方法可以没有参数,也可以有一个两个N个参数,但是没有参数也要有空括号()

    (一般方法首字母是小写,基本类型也是小写,其他对象类名接口名首字母大写,后续单词都用驼峰命名法)

    数据类型

    java是一种强类型的语言,必须为每一个变量声明一种类型,在java中一共八种基本类型

    四种整型 int(4字节) short(2字节) long(8字节) byte(1字节 -2^7 ~2^7 ) [bait]

    两种浮点型 float(4字节) double(8字节)

    char类型 表示单个字符,如’A‘,常用于表示字符常量,表示Unicode编码

    布尔类型 只有两个值,true 和 false,用来判断逻辑条件,整型和布尔值之间不可以相互转换

    声明变量

    举例 int num;

    类型名在变量名之前,并且这条语句以分号结束

    变量名是一个以字母开头的由字母或数据构成的序列,java中的字母指Unicode字符,包括下划线等

    变量初始化

    声明一个变量以后,一定要使用赋值语句对变量进行显式的初始化,不可使用未被初始化的变量

    对于已声明的变量进行复制的格式是,变量名放在等于号左侧,响应的java表达式处于等于号右侧

    int num;

    int num = 10;

    也可以把变量的初始化和声明放在一行,比如int num = 10;

    常量

    java中,使用final关键字指示常量,表示这个变量只能被赋值一次,一旦被赋值后,就不能再更改了,一般常量名全部大写

    在java中,经常会希望某个变量可以在一个类中的多个方法使用,通常将这些变量称为类变量,可以用关键字static final设置一个类常量

    类常量定于于main方法外面,那么这个类的其他方法也能使用这个常量,如果类常量被声明为public,那么其他类也能使用这个常量

    如果想要该常量在其他类的方法也可以使用,那么就加上public关键字,只在此类的方法使用,那么加上private关键字

    运算符

    + - * / % 加减乘除取余,当参与/运算的都是整型时,表示整数除法,如果有一个是浮点数,那么是浮点除法

    可以在赋值语句中,使用一种简化的格式书写二元算数运算符

    例如 x + = 4;等价于x = x+ 4

    自增和自减运算符,n++相当于将变量n的当前值+1,n--将n的值减一,自增和自减运算符需要注意两个点

    • 自增和自减运算符更改了变量的值,所以操作数不可以是数值,比如4++是不合法的
    • 自增和自减运算符可以前缀形式,++n和n++结果一样,但是在数学表达式中,++n使用+1之后的值,n++使用当前值,最好不要在表达式里中用

    关系运算符

    关系运算符 == 检验相等 !=校验不等于 < > <= >=

    逻辑运算符 && 逻辑与 || 逻辑或 !逻辑非,逻辑运算时,如果第一个操作数已经能确定表达式的值,那么不会计算第二个操作数

    三元运算符问号 condition?exp1:exp2 条件为真时计算第一个表达式,条件为假时计算第二个表达式,并返回对应表达式的值

    位运算符

    在处理整型数值时,可以直接对组成整型的各个位进行操作,这意味着可以使用屏蔽技术获得整数中的各个位

    &与|或^异或~非

    关于异或,如果符号左右两值不相等,异或结果为1,相等结果为0;

    强制类型转换=(类型名)变量 

    枚举类型 enum Size {q,w,d };

    字符串,java基本类型里没有字符串类型,有一个预定义类String每个用双引号括起来的字符都是String类的一个实例

    substring方法可以从较大字符里获得一个子串

    s.substring(n,m)从位置为s字符串的位置n的字符到位置m-1的字符,总长度为m-n,比如(0,3)是0 1 2 三个字符

    允许用+号拼接两个字符串,且如果+号连接的有非字符串,后一个被自动转换成字符串并拼接

    JAVA字符串不可更改,因为String类没有提供用于直接修改字符串的方法,如果想更改,可以用substring截取后再用+号拼接的方式

    String类的equals方法可以比较字符串是否相等,不可以用==,用==比较的是字符串所在的位置

    String类的一些方法,假设一个String str =“abcdef”;

    int i =str.length() ; 返回一个int值,为字符串的长度,6

    char c=str.charAt(2);返回一个char值,为位置2的字符,也就是c

    char c[] =str.toCharArray() ;返回一个char数组类型

    for (int i = 0; i < c.length; i++) {};可以c数据遍历

    int a1 = str.indexOf("bc",0);返回bc字符串第一次出现的开始位置,如无返回-1

    int q2 = str.lastIndexOf("bc");返回bc字符串最后一次出现的开始位置,如无返回-1

    equals(String other) ;比较字符串是否相等,相等返回true

    equalsIngnoreCase(String other);比较字符串是否相等,忽略大小写,相等返回true

    String s = str.toUpperCase(); 返回全部大写的字符串

    String s = str.toLowerCase();返回全部小写的字符串

    trim();删除字符串前后的空格

    contains(String other) ;是否包含对应的字符串,包含返回true

    startsWith(String other);是否以某字符串开始,是返回true

    endsWith(String other);是否以某字符串结束,是返回true

    String s =str.replace(char oldchar,char newchar)用newchar替换str里的所有oldchar

    string 和int之间的转换

    string转换成int  :Integer.valueOf("12")

    int转换成string : Integer.valueOf(12)

    由于java String的拼接比较麻烦,所以可以使用Stringbuilder 类,也可以成为String的构建器

    Stringbuilder b = new StringBuilder();

    int length()

    StringBuilder append(String str)拼接一个字符串并返回this

    StringBuilder append(char c)拼接一个字符并返回this

    void setCharAt(int i ,char c) 将位置i的代码单元设置为c

    StringBuilder insert(int i,String s)在i位置插入一个代码单元并返回this

    StringBuilder insert(int i,char c)在i位置插入一个代码单元并返回this

    StringBuilder delete(int n,int m) 删除从n开始到m-1的代码单元并返回this

    String toString()返回一个和构建器内容相同的字符串

    (java中计算位置都是从0开始的)

    打印输入输出到控制台

    输入:略

    输出 System.out.println(x);

    控制流程

     java使用条件语句和循环结构确定控制流程

    一对花括号括起来的若干条java语句叫做块,块确定了变量的作用域

    块可以嵌套,不能在嵌套的两个块中声明同名的变量

    条件语句

    条件为真时,执行一条语句

    if(condation)statement

    //注意观察这个条件语句,if直接跟括号,括号里放条件,如果是一条,可以直接在小括号里放

    如果希望条件为真时,执行多条语句,那么就要使用块,也就是用中括号把代码扩起来

    if(condation)

    {statement1;

    statement2;

    }

    带else的情况就是 if(condation) statement1 else statement2

    注意块的逻辑是若干条java语句,所以如果条件语句嵌套,也是利用中括号来实现的

    循环语句

    while(condation)statement 

    如果条件为ture时,循环执行之后的语句或者语句块

    //注意,这里可以看出条件语句都在小括号里

    如果条件为false 就什么也不执行

    如果想要其后的语句至少执行一次,那么使用

    do statement while(condation)

    do while是先执行语句或者语句块,再检验循环条件,如果为true继续执行语句,为false继续向下执行

    确定循环

    for循环是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或者类似变量来控制迭代次数

    比如把1到10的数输出发到屏幕上

    for(int i=1;i<=10;i++)

    System.out.println(i);

    for (计数器初始化;每次新一轮循环需要检测的循环条件;如何更新计数器)

    for语句的三个部分应该对同一个计数器变量进行初始化、检测、更新

    for语句的第一部分声明的变量,这个变量的作用域就只是for循环的整个循环体,不可在循环体之外使用

    那么因此产生两个现象,一是可以在各自独立的不同的for循环定义同名的变量

    第二个是,如果我们想要在循环体之外使用计数器的终值,要确保这个变量在循环语句的前面而且在外部声明!如下

    int i;

    for (i=1;i<=10;i++){...}

    for循环是while循环的一种简化形式,可以使用while循环写出同样的逻辑

    还有一种for each循环,可以依次处理数组中的每个元素,而不必考虑指定下标

    for (某变量:集合) 语句块  比如for(int element:a)

    定义一个某变量用来暂存集合中的每一个元素,针对该变量执行语句,达到遍历执行的效果

    也就是for each element in a

    但是在不希望遍历集合的每个元素,或者循环内部需要下标时,还是需要传统for循环

    多重选择:switch

    为了避免if else结构在处理多个选项时的笨重,可以使用switch语句

    switch语句将执行与选项值相匹配的case开始执行直到遇到break语句,如果无任何匹配case,走default子句

    switch(choice)

    {case1:

    ...

    break;

    case2:

    ...

    break;

    default://bad input

    ...

    break;

    }

    case可以是char byte short int或者其包装类,枚举常量,

    如果是枚举常量时,不用在每个标签中指明枚举值,可以由switch的表达式值确定

    大数值:略

    数组

    数组是一种数据结构,用来存储同一类型值的集合,通过一个整型下标可以访问数组中的每一个值,如a[i]

    数组变量的声明,数组类型[] 数组变量的名字,比如 int[] a     //可以将int[] 理解为整型数组,那么显然a被声明了一个整型数组

    给数组a赋值,数组是用new运算符创建的,int[] a= int(100); 该语句创建了一个可以储存100个整数的数组

    数组长度也可以是个变量 a=new int(n);创建一个长度为n的数组

    创建数组后,如果是数字数组,所有元素初始化为0,布尔类型初始化为false,对象数据初始化为null

    数组的初始化也有一种简写形式,可以进行初始化元素值,同时定义数组长度

    int[] test ={2,35,6,7};

    test =new int[] {2,35,6,7};

    要获得数组的元素的个数,可以使用a.length

    一旦创建了数组就不能改变它的大小,如果经常需要改变数组大小的,就应该使用另一种数据接口,数组列表(arraylist)

    //通过此理解下 【数据结构】的概念

    数组拷贝:略

    命令行参数

    每个java应用程序都有一个带String args[] 参数的main方法,这个参数表明main方法将接收一个字符串数组,也就是命令行参数

    数组排序

    可以用Arrays类的sort方法快速排序,Arrays.sort(a);

    多维数组,声明一个多维数组 double[][] =balances;

    多维数组其实是数组的数组,数组的每个元素是包含元素的数组

    //需要了解Array类和ArrayList类,使用范围和区别,并因此去看一些算法题,你要举重若轻

    对象与类

     类是构造对象的模版,由类构造对象的过程称为创建类的实例

    java编写的所有代码都位于某个类的内部

    封装是将对象的数据和行为组合在一个包里,并对对象的使用者隐藏了的具体实现方式

    每个特定的对象都有一组特定的属性值,这些值的集合就是这个对象的当前状态

    实现封装的关键是,不能让类中的方法直接访问其他类的实例域,程序仅仅通过对象的方法与对象数据进行交互

    对象的三个主要特性:行为,状态,标识

    对象的状态只能通过调用方法来实现

    OOP的编写思路:首先从设计类开始,然后往每个类里加方法(算法题是直接写方法,所以确定了方法参数和返回即可),经验之谈是名词对应属性,动词对应方法

    要想使用对象,首先要构造对象,并指定其初始状态,然后,对对象使用放哪啊高发

    方法的构造:java中使用构造器构造新实例,构造器是一种特殊的方法,用来构造并初始化对象

    构造器的特点

    • 构造器名字与类相同 //构造器首字母大写,不同于其他方法
    • 每个类可以有一个以上的构造器
    • 构造器可以有0个、1个或者多个参数
    • 构造器没有返回值
    • 构造器总伴随这new操作符一起被调用

     new date() 通过new操作符和构造器方法构造一个对象后,该对象可以传给其他方法,也可以对该对象使用方法

    如果希望构造的对象多次使用,可以将对象存放在一个变量中 Date d = new Date();Date是类型声明,d是变量,new操作符号,Date()构造器

    d就是一个对象变量,即引用了一个Date对象

    修改实例域方法称为修改器方法,习惯上会加上前缀set

    仅访问实例域而不修改的方法称为访问器方法,习惯上会加上前缀get

    一个完整的程序,应该将若干类组合在一起,其中只有一个类有main方法

    最简单的类定义形式:

    class 类名{

    属性

    构造器

    方法

    }

    源文件名(xxxx.java)必须与public的类名一致,在一个源文件中只能有一个公有类,但是可以有任意数目的非公有类

    程序员习惯于将每一个类存到一个单独的源文件里

    对于某些方法来说,出现在括号里的参数是显式参数,而如果会用到对象本身,这个对象就是隐式参数,关键词this可以表示隐式参数

    final 实例域,在每一个构造器执行之后,这个域的值被设置,并且在后面的操作不会再对它进行修改

    static 静态域,被static 修饰的属性,属于类,而不属于对象,没有static修饰的属性则每个对象有不同的属性

             静态常量,也是一个意思,属于类,而不属于对象,如果不被static修饰,则每个对象都要拷贝一份,比如private  final static double PI

       静态方法,是没有this参数的方法,即不能对对象本身实施操作的方法,如果一个方法不需要访问对象状态,所需要参数都是显式参数;或者只需要访问类的静态域,可以使用静态类

    每个类对象的方法都可以对公有域进行修改,所以一般不要把实例域设计成public

    main方法就是个静态方法

    值调用:表示方法接收的是调用者提供的值,不可修改

    引用调用:方法接收的是调用者提供的变量地址,可修改

    JAVA总是按值调用,方法所得到的是所有参数值的一个拷贝

    一个方法不可能修改一个基本数据类型的参数

    重载:如果一个类中,多个方法有相同的名字,不同的参数,便产生了重载

    要完整的描述一个方法,需要指出方法名和参数类型,即一个方法的唯一标识是方法名和参数类型的组合

    一个类,最好要有一个无参数的构造器,如果一个构造器都没有,系统会提供一个无参数构造器

    如果一个类的实例域有每个构造器都会需要赋值的,可以将其直接在类中赋值

    Random() 构造一个新的随机数生成器

    int nextInt(int n )返回一个1~ n-1之间的随机数

     java允许使用包将类组织起来,使用包的主要原因是确保类名的唯一性

    标记public 的类,可以被任意的类使用

    标记private的类,只能被定义他们的类使用

    如果没有标记,这一部分可以被同一个包的所有方法访问

    继承:基于已有的类构造一个类,子类可以继承父类的实例域和方法,在此基础还可以添加新的方法和域,以满足新需求 

    继承关系的判定,即is -a关系,每个子类对象也是父类的对象

    多态 

    抽象类

    抽象方法

    ArrayList是一个采用类型参数的泛型类,尖括号中的类型就是数组列表中保存的元素对象类型

    ArrayList<Integer> data =  new ArrayList<>;

    add方法 在数组列表的尾部添加元素  增

    void add(int index,T obj) 在index位置插入obj,其他元素向后移动

    int size()返回实际包含的元素数目

    T set(int index,T obj)用obj覆盖对应index的值

    T get(int index) 获取指定位置的元素值

    T remove(int index) 删除一个元素,将后面的元素向前移动,被删除的元素由返回值返回

    Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

    Array一旦创建长度无法更改,ArrayList的大小是可以动态变化的

    ArrayList可以通过add get remove来对元素做增加 获得 删除操作,Array是通过下标

    获取数组的长度的方式也不同

    对象包装器

    有时,需要将基本类型转换为对象,比如一个新的Arraylist尖括号里不可以放基本类型

    所有的基本类型都有一个与之相对的类,这些类称为包装器,比如基本类型int的包装类Integer

    对象包装器类是不可变的

    ArrayList<Integer> list = new ArrangList<>;

    list.add(3);会自动变换成 list.add(Integer.valueOf(3)); 称之为自动装箱

    当一个Integer对象赋给一个int值时,会自动拆箱, int n= list.get(i); 会自动翻译成 int n =list.get(i).intValue();

    String toString(int i)

    int parseInt(String s) 返回字符串s表示的整型数值

    Integer valueOf(String s)

    接口

    回调 :是一种常见的设计模式,在这个模式中,可以指出某个特定事件发生时应该采取的动作

    java库中的具体集合

    除了Map结尾的类之外,其他类都实现了Colection

    都可以使用add size remove

    ArrayList 

    HashSet一种没有重复元素的无序集合

    HashMap 一种存储键值对的数据结构

     List:可存储相同的值

    Set:不可存储相同值

    Set的典型实现是HashSet,其主要方法add,remove,contains,均是通过内置的HashMap来进行实现的。

     二叉树的遍历:先序遍历、中序遍历、后序遍历

    先序遍历:根-左-右

    中序遍历:左-根-右

    后序遍历:左-右-根

    一定要记住,以上的顺序不仅针对整个大的二叉树而言,也是每个内部的子二叉树的遍历顺序,只有根据这种规律才能的出每种独一无二的序列

    三大属性

  • 相关阅读:
    angularjs中ng-repeat插入图片
    Torch not compiled with CUDA enabled
    ai 网格变换工具
    ai 网格变换工具
    最后的进入nms的shape数值是怎么来的
    问题import win32api windows下安装pycocotools
    问题、
    输入的图片size为什么是32的倍数,yolo各个模型层说明。upsample+route过程
    YOLO V3代码带注释-阅读笔记系列
    张量或维度表示数学理解思路
  • 原文地址:https://www.cnblogs.com/zhuwf/p/12431395.html
Copyright © 2011-2022 走看看