admin管理员组

文章数量:1579086

1.package regex1;

 

public class Test {

    public static void main(String[] args) {

       p("abc".matches("..."));

       p("a324b".replaceAll("\\d","-"));

    }

    public static void p(Object o) {

       System.out.println(o);

       }

}

 

Tips:主方法与辅助方法各自分别有{}。即主方法不应包括辅助方法p。

 

2pile 编译

 

3.转译字符\(单斜杠)在正则表达式里面应为双斜杠\\。(java里不存在一个反斜线,必须用两个反斜线代替)。

 

4.正则表达式API位置: java.util.regex

 大括号: \\d{1,3} 表示数字数量在1个到3个之间 ;\\d{3}表示三个数字。不加\\d不表示数 字。

 中括号: [1-3] 表示数字在1到3之间(匹配中括号之间的一个字符)。

    Tips:  表示数字的括号中间是横杠,表示数量的括号中间是逗号。

  [^abv] 表示除了abv 之外的其他字母(^在中括号外边代表”行的开头”、在里面表示“非”)。

  [a-zA-Z]、[a-z]|[A-Z]、[a-z[A-Z]]三中表示方法均表示字母在a-z或A-Z之间。

  [A-Z&&[RFG]]表示不仅在A-Z之间而且在RFG 当中的一个。

  a*代表0或多次,a?代表0或1次,a+代表0或1次。

  \w单词字符用于注册用户名,[a-zA-Z_0-9]。

 

两例子: 关于边界匹配器java.util.regex.pattern

空白行的表示方法:p(“ \n”.matches(“^[\\s&&[^\\n]]*\\n$”));

解释:空格开始换行结束(空白行) 匹配 以空白字符且非换行符(因为空白字符中包括换行符)开始0次或多次以换行符结束

Tips:\\b边界字符(boundary)

    \\d数字字符(digit)

 

一般邮箱的正则表达式:”^[\\w[,-]]+@[\\w[,-]]+\\.[\\w]+”

 

5. matches:  匹配整个字符串

      find:  找子串(找完一个子串,找下一个。子串用—分隔开)

在可以找到子串的前提下(否则报错):调用start()end()方法输出子串起始末尾点。

  looking At: 每次从头开始找

注意:在续用matches和find时,中间用reset隔开。否则会影响输出结果。

 

 

6.错误总结 : cannot be resolved to a type
的字面意义是无法识别的类型,也就是说你的代码中有可能有



1.未导入的包.(import java.util.regex.Matcher;)
2.写错的Class Name.
3.未创建却被使用的变量.

 

 

7.分组

正则表达式可以用括号进行分组例如:

 Pattern p = ppille(“W(or)(ld!)”);

 Matcher m = m.matcher(“Hello,World!”);

其中World整个为第0组,or为第一组,ld!为第二组。

 m.group()为m调用group的方法将整组输出。

m.group(1)为m调用group的方法将第一组输出。

m.group(2)为m调用group的方法将第二组输出。

用处:用于分离组内部分(将or单独分离出来)

 

 

 

8.不区分大小写的输出

CASE_INSENSITIVE

例子:Pattern p = ppile(“java”,Pattern. CASE_INSENSITIVE);

 

9.StringBuffer buf = new StringBuffer();

New一个StringBuffer.注意大小写。

 

10.替换字符串

replaceAll(“java”);替换整体不够灵活。

appendReplacement(buf,”java”);appendTail(buf);更灵活,强大。

 

11. Greedy贪婪的  捡最多的拿,但最后如果不符合还会吐出来

Reluctant不情愿的  捡最少的拿

Possessive独占的   捡最多的拿,但最后如果不符合不会吐出来了。效率高。

Pattern p = Patternpile(“.{3,10}[0-9]”);

String s = “aaa5bbbb6”;

Matcher m = p.matcher(s);

 

12.正则表达式中\\1代表group1 group2 相同返回 true 不同返回 false.

\\2 有需要了解观看视频“正则表达式补充知识”

 

 

 

 

 

 

 

未解决的问题:

 

 

1.

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

 

 

public class EmailSpider {

 

    public static void main(String[] args) {

     try {

       BufferedReader br = new BufferedReader(new FileReader("D:\\大学"));

       String line = "";

       while((line=br.readLine()) != null) {

          

       }l

    } catch (FileNotFoundException e) {

           e.printStackTrace();

    } catch (IOException e) {

       // TODO Auto-generated catch block

       e.printStackTrace();

    }

     

    }

 

}

其中readline与readLine有什么不同为什么不能用readline.

能否用br.readline() != null instead of (line=br.readLine()) != null

 

2.parse用法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二,程序格式

1.变量:本质是内存里面的一小块区域,使用变量名来访问这块区域。每个变量在使用前必须要先申请(声明),然后必须赋值(填充内容)才能使用。

              Int i = 100;

              float f = 12.3f;

              double d1,d2,d3 = 0.123;

              String s = “hello”;

注意:String的赋值必须要有双引号“”。

 

2.内存管理分四块区域:一,code segment  存放代码

                                          二,data segment   存放静态变量,字符串常量

                                          三,stack          局部变量

                                          四,heap          new出来的东西

 

3.java变量分类:

位置:

局部变量:方法或语句块内部定义的变量。

成员变量:方法外部、类里面的定义的变量。(类外部不能有变量的声明)

所属数据类型的划分:

基本数据类型变量:布尔boolean,int,char、short、byte、long,float,double。

引用数据类型:类(class)接口(interface)数组

 

4.程序格式(比算方法重要)

1,大括号对齐(左大括号所在的行最左边与右大括号对其)

2,遇到左大括号{(之后的内容整体缩进),Tab键

3,程序块之间加空行(方法与方法之间,变量和方法之间,语句块和语句块之间)

4.并排语句之间加空行(for循环的语句之间,还有public class HelloWorld {

HelloWorld与左大括号之间加空格)

5.运算符两侧加空格(“=”for循环内部除外即可以不加空格)

6.{前面应该有空格(public class HelloWorld { )

7.成对编程(左右大括号同时写)

 

5.for循环得用;for(int i=0;i<=4;i++) { }

然后for循环的里面出现break,直接跳出for循环执行下一语句。

continue是跳过此步,直接从下一个从头开始。

例子:

public class BreakTest {

    public static void main(String args[]) {

        System.out.println("循环没有开始");



        System.out.println("现在开始测试continue");

        for (int i = 0; i < 3; i++) {

            System.out.println("开始第" + i + "次for循环");

            if (i == 1) {

                continue;

            }

            System.out.println("看看continue后这里执行了吗?");

        }

        System.out.println("continue测试完毕\n***********************");



        System.out.println("现在开始测试break");

        for (int i = 0; i < 3; i++) {

            System.out.println("开始第" + i + "次for循环");

            if (i == 1){

                break;

            }



            System.out.println("看看break后这里执行了吗?");

        }

        System.out.println("break测试完毕\n***********************");

    }

}
上机实验以上程序即可明白
总结:
关于breakcontinue的区别:
break是结束整个循环体,continue是结束单次循环;
 
6.方法
    程序包括一个大类,大类里面有主方法,非主方法,还有变量。成员变量在方法外面,类里面。局部变量在方法里面。
   定义:方法:一段完成特定功能的代码片段。
         形参:方法被调用时用于接收外界输入的数据*一种形式相当于一个接口
               也得事先定义好形参所需传的实参的类型。
         实参:调用方法是实际传给方法的数据。按照形参的类型传递。也可不是形参所要求的类型,但必须转化。
         返回值:方法在执行完毕后返还给调用它的环境的数据。
         返回值类型:事先约定好的返回值的数据类型,如无返回值,必须给出返回值类型是void(空的)。

 

return语句即可终止方法的运行,也可以指定要返回的数据。无论哪种功能,只要return功能实现,方法结束。

基本数据类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身。

方法定义有返回值,但是可以不用(就是不用System.out.println输出)这个返回值。但必须用return返回,否则报错。注意:System.out.println(i);这句话不可以返回值。

      public static int m2(int i) {

             return i;

}

想用这个返回值需要在主函数里 定义输出

即:   public static void main(String args[]) {

       Int a = m2(4);

       System.out.println(a);

}

 

 

 

7. java中单引号和双引号有什么区别?

单引号引的数据 是char类型的
双引号引的数据 是String类型的

char定义时用单引号,只能有一个字母,数字。char c='c';数字的单引号代表其ASC码。
而String用双引号,可以是一个,也可能是多个字母,汉字等。就是所谓的字符串。String s="adsaf";
char只是一个基本类型,而String 可以是一个类,可以直接引用。
比如char c='c';不能直接对c调用方法。
String s="abc";  这时可以调用s.charAt(0);等方法,因为String是类,这是就是对象的调用了

 

 

 

 

 

 

未解决的问题

 

1. public class TestExample1 {

           

            public static void main(String args[]) {

             

              for(int i=101; i<200; i++ ) {

                     for(int j=2; j<i; j++) {

                            if (i % j == 0) {

                                   break;   

                            }      else {

                                   System.out.print(i + "");  

                            }

                     }            

              }            

           

            }

 

}

求101到200以内的质数为什么不对?

 

 

 

三、面向对象

  1. 对象的“属性”和“方法”分别对应着事物所具有的“静态属性”和“动态属性”。即成员变量和方法。

                  类:职员

          静态属性(成员变量):姓名,年龄,工资

      动态属性(方法):显示姓名()显示年龄()修改姓名()领取工资

                       

  1. 对象是类的一个具体实例。
  2. 本章考虑问题三步骤: 1.问题里所包含的类和对象。

                        2.每种类每种对象应该具有的属性和方法。

                        3.类和类之间具备了什么样的关系。(继承关系(一般和特殊)、实现关系、多态)

  1. 必须首先定义类才能有对象。对象是JAVA核心。对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体。
  2. Java里面的每一个类就跟一种新的数据类型(int,double)差不多。一样

Dog d = new Dog();

Mouse m = new Mouse();

d.catchMouse(m);

以上为new这个类的一个对象。

       对象一般在主方法内定义,类开始就定义好了。

String,System就是一个类

 

 

 

2.java类的定义

用class关键字定义一个类。

类的定义主要有两方面组成:成员变量(private int age = 20)和方法。(public int getAge() {return age;})

    类的定义:class 类名 { }。

 

3.局部变量与成员变量的区别

java里面的变量首先声明,其次再赋值,最后再使用它。

成员变量:定义成员变量时可以对其初始化(即声明+赋值),如果不对其初始化,java使用默认值对其进行初始化。作用范围:整个类体。

局部变量:如果不对其初始化,会报错。必须进行初始化再使用。

 

成员变量类型 (基本数据类型和引用类型)初始化值

byte、short、int、long               0

     char                                ‘\u0000’

      float                               0.0F

     double                               0.0D

     boolean                              false

     所有引用类型(例如Mouse)            null

 

4.引用类型:除基本类型(四类八种)之外的变量类型。

            所有的引用类型都是指针。

 

?5.静态变量与非静态变量区别(未理解)

用static修饰的变量叫静态变量。静态变量不需要new出对象引用来调用,它可以直接用类名直接调用。当然用对象引用也能调它,只是不需要。

非静态变量则必须用对象引用进行调用。

静态变量在内存空间中只有一份,也永远只有一份。大家共享。

非静态变量只要new出一个对象引用就会在内存中分配一份空间给它。

并且他两的存放地点不一样,静态变量存放在栈空间。非静态变量存放在堆空间里。

在同个类中,非静态成员方法可以调用静态和非静态的成员变量,而静态的方法只能调用静态的成员变量。 Staitic 修饰的成员变量共享。还有就是成员方法 不可以定义为静态局部变量

静态变量是全局变量,被所有类的实例对象共享。非静态变量是局部变量,不共享的

 

6.引用:所有的引用类型都是指针。(一小块内存(d)指向一大块内存(堆内存里))

Dog d = new Dog();  d 就是对所new出来的东西的引用(指针)。

                      new出来的东西存放在堆内存里。

对象是new出来的。位于堆内存里(堆内存空间较大,只有在运行期间才知道new出来的对象的大小故放于较大空间的对内存里)。类的每个成员变量在不同的对象中都有不同的值(除静态变量)而方法只有一份,调用时才分配占用内存空间。

7.对象的创建和使用:

  1. 必须使用new关键字创建对象。
  2. 使用对象(引用).成员变量来引用对象的成员变量。d.furColor()
  3. 使用对象(引用).方法(参数列表)来调用对象的方法。
  4. 同一个类不同new出来的对象有不用的成员变量存储空间。
  5. 同一类的每个对象共享该类的方法。

 

8.内存管理分四块区域:一,code segment  存放代码

                                         二,data segment   存放静态变量,字符串常量

                                         三,stack (栈内存)         局部变量

                                         四,heap(堆内存)         new出来的东西

理解了内存理解了一切。

 

9.局部变量

public  Cat {

     public static void main(String args[]) {

            Cat c1 = new Cat();

            Cat c2 = new Cat();

            Int i = 9;

}

在上例子中,c1,c2,i都可以看成是局部变量。c1,c2类也是局部变量。方法里面定义的类都可以看做局部变量。

 

10.构造方法

  1. 使用new + 构造方法 创建一个新的对象
  2. 构造函数是定义在Java类中的一个用来初始化对象的函数(方法)。
  3. 构造函数与类同名且没有返回值(直接类名(){}不能加void)。

 

构造方法解答了我心中的疑惑(“new新对象的时候为什么类要加()”)调用了构造方法。

 Cat d = new Cat();

 

对于构造方法,如果类中未定义类的构造方法,系统会默认构造一个空参数的构造方法(Person() {})这时只能new 一个无参数的person 比如”Person p = new Person()”如果此时new一个带参数的person就会报错,“Person p = new Person(1,2)”。

如果定义了有参数的构造方法,可以new有参数的对象,不可以new无参数的对象了! 也就是说:要么,定义构造函数带对象的,那么就只能new一个带参数的类

要么,不定义构造函数,就只能new一个不带参数的类。

 

 

11.约定俗成的命名规则

1.类名的首字母大写(Person)

2.变量名和方法名的首字母小写(furColor,int i,catchMouse,scream)

构造方法除外与类同名

3.运用驼峰标识(furColor, catchMouse,HelloWorld)

 

四、内存解析

基础数据类型的变量就一块内存(栈内存)int i = 4;

引用数据类型的变量有两块内存(栈内存指向堆内存)Dog d = new Dog();

方法调用遵循“值传递”。在JAVA里,凡是引用类型(类、接口、枚举类型、数组)都是传地址,凡是基础类型(8种,如int、long)都是传值。
 
public static void main(String args[]) {
int day = 9;
        BirthDay d1 = new BirthDay(1992,3,4);
        对象调用.change2(d1);
test.change1(day);
}             
        public void change1(int i) {
               i = 23 ;
        }
        
        public void change2(BirthDay b) {
               b = new BirthDay(2001,3,4);
        }
在此方法2中传入的参数是Birthday的引用类型。d1属于Birthday的引用,所以可以传d1进来。不能直接传入参数b。这就是传地址(传引用指向同一个对象)

方法1中传入的参数是基本数据类型遵循“值传递”。

 

1.java修饰符

Java有很修饰符,而且范围有区别

类修饰符      :public、default、abstract、final、strictfp

接口修饰符    :public、default、abstract、strictfp

构造器修饰符  :public、protected、default、private

全局变量修饰符:public、protected、default、private、static、transient、volatile、final

方法修饰符    : public、protected、default、private、abstract、static、final、native、synchronized、strictfp

内部类        :public、protected、default、private、static、abstract、final

局部变量修饰符:final



private  和 public没有对应关系

private可以修饰变量、构造器,方法、内部类;在变量前面加private 表示类的私有属性,只可以在类内部访问使用;
 
2.内存分析的时候从main方法的第一句开始分析。

 

3.求距离

 

double getDistance(Point m) {

    return (x-m.x)*(x-m.x)+(y-m.y)*(y-m.y)+(z-m.z)*(z-m.z);

}

 

 

 

 

 

 

未解决的问题

见Test8 change1方法

如何通过调用一个方法来改变一个数值

int  i = 4;

public static void chang1(){}

 

Test9

 

 

五.方法的重载

指一个类中可以定义有相同的名字,但参数不同)的多个方法。调用时,会根据不同的参数列表选择对应的方法。只要他们区分的开来,就是构造方法。

参数不同分为:参数个数不同、参数类型不同(int,float)

前提是构成重载的两个方法能够区分。(“返回值不同其他相同”无法区分两个方法;此为“重名现象”会报错)。

构造方法也可以构成重载。(一般重载利用参数个数同,进行参数的设置)

 

六.对象的创建与使用

  1. 必须使用new关键字创建对象。
  2. 使用对象引用.成员变量用来引用对象的成员变量。
  3. 使用对象引用.方法(参数列表)来调用对象的方法。
  4. 同一类的每个对象有不同的成员变量存储空间。
  5. 同一类的每个对象共享该类的方法。
  6. 非静态方法是针对每个对象进行调用。(无static 的 方法,对于这种方法必须要new个对象利用对象名.才能调用,因为它是依赖于每个对象的属性的,每个对象的成员变量即属性是不同的。【腿长的狗捉兔子】)

 

2.2月11日所犯错误:

  1. 类的方法调用,方法必须定义在那个类体里,定义在别的类体里面无法调用自己的方法。
  2. “return不能输出”,必须调用System.out.println()才能输出;
  3. “getR()”括号里无参数;解决办法“在设计方法的时候想象类调用这个方法的时候用不用往里面传参数,如果不用例:c.getX,定义getX()方法的时候括号里不加参数。如果用例:c.setX(double i = 2),定义set()方法的时候括号里加参数”

详见TestCircle,TestCircle2.

 

3.this 关键字

  1. 在类的方法定义中使用的this关键字代表使用该方法的对象的引用。
  2. 当必须指出当前使用方法的对象是谁时要使用this.
  3. 有时使用this可以处理方法中成员变量和参数重名的情况。(当无法确定的时候利用就近原则)
  4. This可以看做是一个变量,他的值是当前对象的引用。

一般出现在方法里,当这个方法还没有调用的时候,this指的是谁并不知道,但是实际当中,如果new一个对象出来,this指的就是当前这个对象,对哪个对象调这个方法,this指的就是谁。

本文标签: 菜鸟错误