Java的相关基础技术

来源:互联网 发布:网络全职 编辑:程序博客网 时间:2024/06/14 04:13
1: md b 创建目录b    rd b 删除目录b(删除b文件夹)   cd..回到上级目录  cd a 进入目录a  cls 清屏    del a.txt 删除文件(除了文件夹以外的文件)
   del * 删除所有文件夹以外的文件(如.txt文件)     del *.txt删除指定格式文件    cd/ 退回到根目录  cd /d 盘符\..\..  跨盘符切换目录   dir 列出当前文件夹所有文件
   删除带内容的文件夹  
   rd +/s+文件夹名称  询问是否删除       rd +/q+/s文件夹名称  直接删除
2.关键字,赋予特殊含义,在editplus中显示蓝色,字母都是小写    其中 goto const是保留的关键字,目前还没有任何功能
3.标识符(开发人员给类,接口,方法,变量,常量,等起名字使用的字符序列)的组成规则:
    1.所有英文字母大小写
    2.数字字符
    3.$和_   看企业如何规划,用来连接某些名称比如 Demo_1$Test
  注意事项:
    1.不能以数字开头
    2.不能用java中的关键字
    3.区分大小写
    4.不能有空格
  规范
    1.类或接口
         1个单词:首字母大写,其余字母小写      Hello
         多个单词:每个单词的首字母大写,其余字母小写   HelloWorld
    2.方法或者变量
         一个单词:全部小写  age
         多个单词:第一个单词首字母小写,后面的单词首字母大写
    3.常量
         一个单词:全部大写  AGE
         多个单词:全部大写中间_链接
    4.包(文件夹)
         小写单词
4.数字默认十进制
4.字符串常量双引号 “HelloWorld”   字符常量单引号'a' '*' '#' 内容只能是单个的 其中 内容可以是一个空格,多个就不行了
5.空常量 none;
6.面试开发中一定要写注释,代表专业性
7.48 -'0'   65-'A'    97-'a'
8.整数相除得到的是除法的商  3/4=0.75但cmd只显示0(int)  3/4.0=0.75 cmd显示0.75(提升为double)
9.%取余,正负号取决于被除数
10单字符与数字相加,相当于单字符转换成ASK码再加数字  'A'+1=66=1+'A' 所以计算式要写   25+"*"+26+"="+51  或者 int x=1;int y=2;   System.out.print(y+"*"+x+"="+y*x+" ");
  字符串与后面数字或单字符相加,会把后面的也变成字符串  "ABC"+1=ABC1  "ABC"+'a'=ABCa "ABC"+'a'+1=ABCa1  "ABC"+1+'a'=ABC1a  5+5+"ABC"=10ABC  "ABC"+5+5=ABC55
11.高级赋值运算符,  += -= *= /=   默认强制类型转换,不需要手动强制转换
12.&&与&  ||与| 结论都一样  不一样之处:  &&(短路与)若前面的表达式已经false则后面的表达式就不再运行,而&前后表达式都运行,节省能源
                                          ||(短路或)若前面的表达式已经true则后面的表达式就不再运行,而|前后表达式都运行,节省能源
13.位^的特点:一个数被另一个数异或两次,其值不变  a^b^a=b    a^b^b=a  3^4^3=4  4^4^3=3;
14.面试题:交换两个数的值   第一种方法:冒泡法   第二种方法:位异或  int a=10;int b=20;    a=a^b;b=a^b;a=a^b;   int a=20;int b=10; 第三种方法: a=a+b;b=a-b;a=a-b;
                            第四种:b=(a+b)-(a=b);
15.左移<<  结论:原来的数*2的移动次幂   int a=4 a<<1  4*2^1=8    右移>> 结论:原来的数/2的移动次幂
   面试:计算2*8的其他方法   2左移3     int a=2 a<<3  2*2^3=16;
16.(关系表达式)?表达式1:表达式2;
17.转义符号:   \n 代表回车符(windows系统\r\n都可以,linux中回车只是\n)  \t 代表制表符(单元格对齐) \b 退格  \r 按下回车键(windows能识别,linux不行)  \"  \"  一对冒号""   \\ \\ 一对 \\
18.位&,位|,位^,都是在补码中进行的
19.if()括号内必须是true或者false 赋值语句左边必须是变量
20.java -version 可以查看jdk版本
21.switch中如果有一个case与参数相等被选中执行但结尾没有break,那么会发生case穿透现象,他的下面的case不管等不等于参数值都会执行,直到遇到break,或者大括号结束
22.switch中default即使写在最前面,也是先执行case最后执行default
23.switch中如果没有一个case与参数相等,并且都没有break,那么所有case也都不会执行
24.int a=10; if(a++>12){ 语句 }    虽然小括号结果是false大括号语句不执行,但小括号中的语句会执行,所以最终a会因为小括号内的语句变成11
25.成员变量定义在类中,整个类都可以访问,存在于堆内存的对象中,随着对象的创建而存在,随着对象的消失而消失,都有默认初始化值,(被new出来的放在堆内存中)。默认初始化 byte short int long---0  char---'\u0000'(空字符)  boolean---false  float double---0.0 引用数据类---null
26.局部变量定义在类内部函数的局部代码块中,只在所属区间有效,存在于栈内存的函数中,随着所属区域的执行而执行,随着所属区域的释放而释放,没有默认初始化值,要想使用必须先初始化
27.一个类内部函数或方法之间的调用前提是:静态属性相同才可以,静态主函数可以调用非静态函数,具体看第38个知识点
28.一个类内部主函数中创建了一个对象,该对象其中一个属性是成员函数,那么主函数中的该对象的成员函数,可以与该对象现在所处的主函数静态类型不同
29.流程控制语句:break continue return
30.数组和对象都是引用数据类型变量,都需要用new创建,new的时候在堆内存开辟空间,会有默认初始化值
31.int[] arr = arr1;  将数组arr1的地址赋给arr  这样二者有相同的地址,任意一个数组改动,另外一个数组也会相应改动,(多个栈内存中的局部变量可以指向同一个堆内存中的数组地址)
32.int arr={1,2,3}  arr=null;   栈内存中局部变量和堆内存中数组断开连接
33.函数中的基本数据类型变量作为形式参数传递的时候,函数中形式参数的改变不影响实际参数(因为函数结束就弹栈了)
   public static void main(String[] args)
   {
      int a = 10;
      int b = 20;
      sum(10,20);
      System.out.println(a+"+"+b);//输出的是 10+20;实参不受影响
  }
   public static void sum(int a,int b)
   {
      a++;
      b++;
  }
   函数中的引用数据类型变量(如数组,对象)作为形式参数传递的时候,函数中形式参数的改变对实际参数有直接的影响。
34.构造函数可以调用一般函数,一般函数不能调用构造函数
35.this可以用于在构造函数中调用其他构造函数 如下:
   Person(String name)  //一个参数的构造函数
   {
        this.name = name;//当成员变量和局部变量(形式参数)重名时,可以用关键字this来区分,该句等价于=> 调用对象.name=name;
   }


    Person(String name,int b)  //两个参数的构造函数
   {
  //name = a;  可以自己赋值,也可以在构造函数中调用其他构造函数  如下
  //注意构造函数用this语句调用其他构造函数时只能写该在构造函数的第一行才行
           this(name);//this是指调用的对象,(name)是指含有一个参数的构造函数 this(name)=>执行person(String a)构造函数
 
           if(b<0)  //如果参数b是小于0的则不让初始化,直接退出
      return;
  age = b;      
   }
36.类中函数只要用到了本类对象都用this来表示
37.静态使用的注意事项:
  1.静态函数只能访问静态变量或其他静态函数
  2.非静态函数既可以访问静态又可以访问非静态
  3.静态方法中不可以使用this或者super关键字
  4.主函数是静态的,当主函数想调用非静态的函数时,可以创建一个主函数所处类名的对象,用该对象调用非静态方法
38.一个主函数内部的对象调用成员函数时不用考虑主函数和成员函数是否静态相同
   一个主函数直接调用其他函数时需要看两个函数是否静态相同,相同直接调用,不相同看37中的第4点。
39.加静态后的成员变量,公有,储存在方法区,由类或者对象调用最好是类,因为静态内容都已经共享,再创建对象调用,浪费堆空间,所以用类调用,可以节省,不用堆创建空间
   不加静态的成员变量,私有,储存在堆内存对象中,由对象调用
40.面向对象三大特征:封装  继承  多态
41.静态代码块(在类中创建,给类进行初始化,一但类被调用就会执行,名字固定static,随着类的加载而执行)
   static{
            最先执行,并且只执行一次
  }    
   构造代码块(在类中创建,没有名字,用来给所有创建的对象进行初始化,每个对象创建时都会执行)
         {
            第二执行,当所有 有参无参的构造方法中出现了相同的代码,就把这些相同代码抽取到构造代码块中
  }
   构造函数(在类中创建,名字和类名相同,参数因需求而定,构造函数是给特定参数的对象进行初始化的)
   Person(){
            第三执行
  }
  局部代码块(在函数中创建,没有名字,用来限定局部变量生存周期)
         {
            函数内局部代码块外,是没办法访问局部代码块内部的变量的,控制变量生命周期
  }
42.一个类中成员变量可以和局部变量名称一样,当方法中调用该局部变量变量时,采用就近原则,先看方法中有没有该名称变量,有就显示,没有就到方法外寻找,如果方法外还没有就报错
   class Person
   {
      int num = 3;//同名成员变量


      public void
      {
          int num = 4;//同名局部变量
          System.out.println(num);//遇到同名成员变量和局部变量时,采用就近原则,因为函数内部有一个num,所以先调用他,显示4,如果函数内部没有该num,则到方法外寻找num,显示3
      }    
   }
43.类中的方法都是静态的,所以该类不需要创建对象,为了保证不让外部创建该对象,可以将该类构造函数私有化,不用对象,用类.函数名来调用
44.javadoc(文档化) -d(指定目录) myhelp(文件夹名) -author(作者) -version(版本) Arr.java(文件名)
   注意要想类被文档化有前提:1.被private修饰的函数不能被文档化     2.类必须是public 修饰
45.通过super初始化父类内容时,子类的成员变量并未显示初始化,等super()父类初始化完毕后,才进行子类的成员变量显示初始化
46.共性的向上抽取变成抽象类,供其他的类继承
   个性的向上抽取变成接口,供其他的类实现
   用接口创建规则(USB口),让类去实现规则(USB接口的鼠标或键盘),用函数去调用规则(PC电脑启动USB连接的设备)。
47.*手机项目
1.含有参数:
           品牌    价钱    数量
2.步骤:
           1.定义三个私有化成员变量(private)
     2.通过有参构造函数定义对象初始化数据(形参赋值给成员变量 this.)
              3.定义set(this.)    get(return)
     4.通过get 来显示数据(主函数中直接System.out.println(get.**);显示数据,或者,将get封装成函数,通过调用函数间接显示数据)
     5.通过set 来改变数据(主函数中改变数据)
48.无参构造函数                   配合         有参set定义 形参赋值给成员变量 的规则(this.p = p;)   无参赋
   有参构造函数(this.p = p;)      配合                   有参set改变 原先成员变量中被赋的值   (this.p = p1;)  有参改
49.java.lang包下的东西使用时不需要导包
50.if(a instanceof cat)// instanceof 用来判断一个对象是否属于什么类型,只能用于引用型数据类型的判断
51.开发的原则:高内聚,低耦合
   内聚:就是一个类能够独立完成某件事的功能
   耦合:就时类与类之间的关系
52.分层初始化:
   子父类初始化过程   父静态代码块-子静态代码块-子构造函数-父构造代码块-父构造函数-子构造代码块
53.子类不可以重写父类中的构造方法,但子类构造函数可以通过super();去访问父类构造方法
54.子类重写父类中方法,想保留父类方法中的功能可以在子类该方法中用super.show();来调用父类原有方法
55.被final修饰过的引用数据类型变量,其地址值不能再发生改变  final person a = new person();  a = new person(); =》报错
56.String引用数据类型在作为参数传递时可以把他看做值数据类型传递,参数的改变不会影响到原有数据
   stringBuilder,stringBuffer,数组,对象等等引用数据类型在作为参数传递时参数的改变会影响到原有数据
57.tringBuilder,stringBuffer没有重写equals方法,比较的是地址值
58.Integer装箱数值超过127则会返回一个新Integer对象,数值小于等于127返回本对象
59.System类   无构造函数(不能被实例化)   静态方法有=》  调用垃圾回收器  退出jvm  当前系统时间毫秒值   Object子类重写finalize()函数,自定义垃圾回收器内容
   SimpleDateFormat类 有参(指定字符串格式yyyy-MM-dd HH:mm:ss,返回一个Date对象)无参(默认格式)构造方法 方法有=》 String解析成Date(parse)   Date格式化成String(format)
                                       
例子:        String x = "2017.10.12";
SimpleDateFormat y = new SimpleDateFormat("yyyy.MM.dd");
          //将字符串转成Date类型
            Date b  = y.parse(x);
  //将Date转成字符串类型
                                        String c = y.fomart(b);


   String Regex = "";  boolean flag = 字符串.matches(regex);  正则表达式    String[] strs = 字符串.split("-") 字符串分割成字符串数组  String a = 字符串.replaceAll("[0-9]","*")替换功能  
   Arrays.toString(任意类型数组参数)-有格式输出数组   Arrays.sort(任意类型数组都可以使用)-数字排序     Arrays.binarySearch(任意类型数组都可以使用,要查询的数据)-二分查找(需要先排序才可以)
   Integer基本数据类型包装类 有参(int String)构造函数,无需导包,主要应用是int-String之间转换
   Random类作用产生随机数  有参无参两种,有参指定种子,无参使用默认   .nextInt():生成随机的int类型的值  -2^31 ~ 2^31-1   nextInt(int n) : 生成一个int类型随机数,范围在[0,n)   一般我们用Math类中的Random方法来创建[0,1)之间的随机数,因为不需导包和创建对象,又是静态方法直接Math.random();
   Math类无需导包,全部静态方法,类名调用,作用是运算,具体看jdk   
   Data类需要导包,无参有参,作用:无参创建当前系统时间,有参创建元年加毫秒值   方法:getTime()当前对象毫秒值  setTime(long time)当前对象添加毫秒值
   Calendar类需要导包:获取日历内容的类是抽象类但内部创建了获取该类对象的方法public static Calendar getInstance()   对象.get(int field) 获得给定日历字段对应的值
                       void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量
            public final void set(int year,int month,int date)设置日历时间
   BigDecimal类 含参构造方法 public BigDecimal(String val) 方法add+  subtract-  multiply*  divide/      sum.doubleValue();将BigDecimal转double类型  由于在运算的时候,float类型和double很容易丢失精度,
   String类   含参无参构造方法,每一个String类型字符串都是对象可以直接调用方法,此类主要作用=》数组与String之间转化,对String类型数据进行操作  
60.String和int类型的相互转换
 * int --- String
 * 1.使用+和字符串拼接+""
 * 2.String类中的静态方法valueOf(int i)     ****无需导包,静态方法,类名调用
 * 3.int -- Integer  -- String
 * 4.Integer类中的public static String toString(int i)   ****无需导包,静态方法,类名调用
 * 
 * String --- int"123"  123
 * 1.Integer类中的public static int parseInt(String s)   ****无需导包,静态方法,类名调用
 * 2.String --- Integer --- int(public int intValue())
61.
 * String -- StringBuffer : 目的就是为了使用StringBuffer中特有的方法。(反转)
 * 1.StringBuffer的构造方法:public StringBuffer(String str)
 * 2.append()方法将字符串添加到字符串缓冲区中。(*****************)
 * 3.insert()方法将字符串插入到字符串缓冲区中。
 * 
 * StringBuffer -- String : 有的时候我们需要使用到String.
 * 1.toString()方法(*****************)
 * 2.通过substring()去截取子串
 * 3.使用String的构造方法:public String(StringBuffer buffer)
62.数组有length属性=>arr.length,String有length方法=>String.length(),集合没有length,但有size方法
63.栈:先进后出(入口出口同侧)    队列:先进先出(入口出口对侧)      数组:查询快,增删慢,先进先出     链表:查询慢,增删快
64.相同字符串的哈希值是一样的,因为字符串储存在常量池中,两个相同字符串共用一个地址值(哈希值)
65.Collection集合中的List和set有迭代器,而Map集合中没有迭代器,有它自己的方法
66.泛型类型只能是引用数据类型,如int数据用泛型时必须用Intager,输入int数据会自动装箱
67.countiniu 跳过本次循环进入下次循环   breakbreak 跳出,作用范围,只能是switch,或者循环语句中才可以,超出范围报错,循环嵌套switch遵循就近原则    ruturn跳出最近的函数
68.一个类中被static修饰的成员变量,在创建该类对象时会被所有该类对象所共享,修改会互相影响,可以修饰集合
69.比较两个字符串内容是否相同两种方法  1是用equles返回的是布尔型   2是compare(String中字典比较方法)返回值是字符串中字符长度相差 int类型返回值  0代表相等长度字符
70.用户键入最好用nextLine()接收,防止前nextInt()后nextLine()出现错误,需要int数据时再通过Integer.parseInt();转一下
71.增强for循环能遍历Collection集合(单列集合),但是不能遍历Map集合(双列集合)
72.TreeMap集合中键的泛型是非new对象类型(integer,String等)无需写自然排序器有自然排序器,键是new对象类型(new Student())需要写自然排序器
   TreeSet集合中存储非new对象类型(integer,String等)无需写自然排序器有自然排序器,存储new对象类型(new Student())需要写自然排序器
73.integer泛型在TreeSet,HashSet中会自动排序从小到大,String泛型添加的是数字如"1","2"在面对treeSet时也会自动排序从小到大,在HashSet中不会
74.StringBuffer HashTable         vector  都是线程同步,安全,效率低
75.HashMap集合中键重写HashCode和equals后出现相同键会覆盖,没重写出现相同键会都存储
原创粉丝点击