zoukankan      html  css  js  c++  java
  • JAVASE01---Unit01: API文档 、 字符串基本操作

    用户看见的和你没有关系。客户端主要用来展现的,服务端(后台)。程序员是内在美,和外在美没有关系。UI赋予你内在美,程序赋予你外在美和灵魂。java学完之后做的是服务端开发,以及Android的工作。服务端开发分为两个分支,最主流做的是商业级的服务器(公司及企业的管理系统、OA系统,例如银行操作系统后台都是java的工作),其次就是游戏,端游等等。大部分工作做传统的javaEE工作,商业级的东西。

    C语言是出现比较早的高级语言,它现在基本上做的都是底层的操作。比如,驱动的开发,内核的开发。和操作系统底下挂钩的东西,做移植和嵌入式。上层看不到,它是渗透最广、面最大的,java离不开C语言,没有C语言没有java,java的虚拟机运行的是class文件,虚拟机就是拿c语言写的。家里面的电视,机顶盒的开发,用的就是c语言。面向过程而非面向对象,写复杂程序不合适。C++就是面向对象语言,本地运用程序就是用C++写的。windows是.net框架。

    Lnuix开元,内核越来越完善,到公司用的比较多。

    ************************************************************************************************
    API---库library

    在eclipse下面新建一个项目,project name:JSD1701_SE
    src下新建一个包:Name:day01

    一个方法,一个类。
    java class
    Name:APIDocDemo

    ==================================================================
    package day01;
    /**
    * 当前类是用来测试文档注释使用的
    *
    * 文档注释只在三个地方定义:
    * 类,常量,方法(静态方法,成员方法,构造方法)
    * @author adminitartor
    * @version 1.0
    * @see java.lang.String
    * @since JDK1.0
    *
    */

    public class APIDocDemo{
    /**
    * sayHello方法中使用的问候语
    */
    public static final String INFO = "你好!";
    /**
    * 为给定用户添加一个问候语
    * @param name 给定的用户的名字
    * @return 含有问候语的字符串
    */
    public static String sayHello(String name){
    return INFO + name;
    }
    }
    =======================================================================
    导出文档
    在项目名---Export(导出)---Select:Java(Javadoc)---


    doc.tedu.cn
    java文档---6是中文版文档、7、8是英文版


    javaSE中最长见的String这个类的字符串
    字符串是只要写程序,一定用的。文字是和计算机直接交互的方式。字符串在java中的地位,是非常重要的。重要到java虚拟机的优化,编译器开一些特权,可以逾越一些java的语法。

    String 是被final修饰的
    1)类;--- 被类修饰,类不能被继承;不能被扩展
    2)属性; ---被属性修饰,值不能被修改;
    3)方法; ---不能被重写。

    计算机的编码和二进制:
    《数字电子技术》、《模拟电子技术》 计算机只认识0和1,标识的两个数字。有电和没有电。
    0-9 拉位数 1010反转进位
    存二进一
    0
    1
    10 ---2
    11 ---3
    100 ---4
    101
    110
    111
    1000


    8421
    1111 ---15
    0100 ---4
    0111 ---7
    10111 ---16


    byte:规定一个8位二进制就是一个字节
    11111111 ---256

    125 64 12 16 8 4 2 1


    abc asc编码

    hello ---40个字节

    h 输到了内存里的编码

    00000000 a
    00000001 b

    asc编码
    asc编码用一个字节表示文字,英语是非常适合计算机的语言。


    内存:256G 能保存多少个1010?

    1比特是一个字,1和0。
    1KB=1024*8=8192
    1byte=1个字节(8位二进制)
    1MB=8192*1024=8388608
    1GB=8388608*1024=8589934592(80多亿个1010二进制)

    中文应该怎么表达?
    你好
    英文保留,
    两个字节

    你好
    ab ,, GBK国标编码

    若访问岛国网站,日本有自己的文字。

    我国计算机用JDK读取,乱码的原因是两个不是使用了同一个字符集,导致编解码出现了错误。
    编码?
    ---把文字转化为二进制,这个过程叫做编码。
    解码?
    ---计算机的二进制还原为人类认识的文字,叫解码。

    解码器
    MP3用文档打开,有乱码存在。

    编解码

    Unicode编码,唯一编码二进制。Unicode组织的伟大志向。

    UTF-8(常用的)

    a 97(二进制是一样的)
    00101001


    字符串的特性及方法
    String是不可变对象

    新建StringDemo1.java
    ****************************************************************************
    package day01;
    /**
    *字符串是不可变对象,即:字符串对象一旦创建,内容不可改变,若改变一定创建新对象
    * @author adminitartor
    */

    public class StringDemo1{
    public static void main(String[] args){
    //java推荐使用字面量形式创建字符串对象
    String s1="123abc";
    //字面量对象一旦发现曾经创建过就重用
    String s2="123abc";
    //s2重用s1创建的字符串对象
    System.out.println(s1==s2);//true 双等于比的是这两个变量的值相等 引用类型地址一样,存的指向的是同一个对象
    System.out.println(s1.equals(s2));//true
    //new操作一定创建新对象
    String s3 = new String("123abc");
    System.out.println("s3:"+s3);

    System.out.println(s1==s3);//false
    System.out.println(s1.equals(s3));//true
    /*
    * java编译器有一个优化措施,即:
    * 当一个计算表达式参与运算的值都是字面量,那么直接计算,并将结果编译到.class文件中
    *所以下面的代码在class文件中的样子为:
    * String s4 ="123abc";
    */
    String s4 ="123"+"abc";
    System.out.println(s1==s4);//true

    String s5 ="123";
    String s6 = s5+"abc"; //一方是变量,编译时就不计算
    System.out.println(s5==s6);//false


    int a=1000*60*60*24*365;
    }
    }


    ***************************************************************************

    双等于不是恒等成立的,只是在这种情况下成立。此地方为什么一样?原因是用到java对字符串的优化措施,java是从c语言进化过来的,在开发java这帮程序员来讲,他们是c语言高手,他们用c语言写虚拟机写java。这帮人以前曾有过很多很多开发经验的,开发软件的时候字符串难免会用,在一个程序中会大量重复的使用同一个字符串内容。例如,上网,我写的是一个服务端,今天出了一万字的新闻,

    ****************************************************************************
    创建 String_length.java

    package day01;
    /**
    * int length()
    * 返回当前字符串的长度,即:字符个数
    * 无论中英文,每个字符1个长度
    * @author adminitartor
    */

    public class String_length{
    public static void main(String[] args){
    String str = "你好java";
    int len = str.length();
    System.out.println("len:"+len); //6
    }
    }

    ****************************************************************************
    package day01;
    /**
    * int indexOf(String str)
    * 查找给定字符串在当前字符串中的位置
    * @author adminitartor
    */

    public class String_indexOf{
    public static void main(String[] args){
    // 0123456789012345
    String str ="thinking in java";
    /*
    * 找第一次出现"in"的位置
    */
    int index=str.indexOf("in");
    System.out.println(index);//2 严格区分大小写,若是"In",则值为-1。没有给的内容
    /*
    * 从下标3处开始查找第一次出现"in"的位置
    */
    index = str.indexOf("in",3);
    System.out.println(index);//5
    /*
    * 查找最后一次出现"in"的位置
    */
    index = str.lastIndexOf("in");
    System.out.println(index);//9

    }
    }

    ****************************************************************************
    package day01;
    /**
    * int indexOf(String str)
    * 返回给定字符串在当前字符串中的位置,若当前
    * 字符串不含有给定字符串则返回-1
    * @author Daisy.yang
    *
    */
    public class String_indexOf2 {

    public static void main(String[] args) {
    // 0123456789012345
    String str="thinking in java";
    int index = str.indexOf("in");
    System.out.println(index); //2

    //如果在写邮箱的时候,
    index=str.indexOf("in",3);
    System.out.println(index); //5

    index=str.lastIndexOf("in");
    System.out.println(index); //9
    }
    }
    ****************************************************************************
    《java编程思想》身份的象征,看不看无所谓。哈哈哈哈,用为工具。

    ****************************************************************************
    package day01;
    /**
    * int substring(int start,int end)
    * 截取当前在字符串指定范围内的字符串内容并返回。
    * 在java api中通常使用两个数字表示范围时,都是"含头不含尾"的。
    * @author adminitartor
    */

    public class String_substring{
    public static void main(String[] args){
    // 01234567890123
    String str ="www.oracle.com";
    /*
    * 截取域名:
    * 通常用两个数字表示范围时,都是含头不含尾的
    */
    String sub = str.substring(4,10); //写到10,含头不含尾
    System.out.println(sub);//oracle

    sub = str.substring(4);
    System.out.println(sub);//oracle.com

    /*
    * http://www.oracle.com
    * www.oracle.com
    */
    // String host ="http://www.oracle.com.cn";
    //截取域名?
    // int start = host.indexOf(".")+1;
    // int end = host.lastIndexOf(".",start);
    // sub = host.substring(start,end);
    // System.out.println(sub); //oracle

    String host=getHostName("http://www.baidu.com");
    System.out.println(host); //baidu

    host = getHostName("www.oracle.com");
    System.out.println(host); //oracle

    host =getHostName("www.tedu.com.cn");
    System.out.println(host); //tedu

    }
    /**
    * 获取给定地址中的域名
    * @param host
    * @return
    */
    public static String getHostName(String host){
    int start = host.indexOf(".")+1; //第一个点之后的第一个字符
    int end= host.indexOf(".",start);
    return host.substring(start,end);
    }

    }


    *******************************************************************************

    创建 String_trim.java
    *******************************************************************************
    package day01;
    /**
    * String trim()
    * 去除一个字符串两边的空白字符(空白不等同于空格,只能说,空格只是空白的一种)
    * @author adminitartor
    */

    public class String_trim{
    public static void main(String[] args){
    String str =" hello ";
    String s = str.trim();
    System.out.println(str);// hello
    System.out.println(s); //hello
    }
    }
    *******************************************************************************

    创建 String_charAt.java

    *******************************************************************************
    package day01;
    /**
    * String charAt(int index)
    * 返回当前字符串中指定下标处对应的字符
    * @author adminitartor
    */

    public class String_charAt{
    public static void main(String[] args){
    // 0123456789012345
    String str ="thinking in java";

    char c = str.charAt(9);
    System.out.println(c);//i

    /*
    * 查看一个字符串是否为"回文"
    * 上海自来水来自海上
    */
    String info="上海自来来水自海上";
    // String info = "上海自来水来自海上";
    for(int i=0;i<info.length()/2;i++){
    if(info.charAt(i)!=info.charAt(info.length()-1-i)){
    System.out.print("不");
    // System.out.println("不是回文");
    // return; //此方法结束,若是break只是跳出for循环。结果就是两种。
    //若加上else,输出三种,是回文是回文不是回文。
    //开关?
    //return是结束方法。
    break;
    }
    }
    System.out.println("是回文");
    }
    }
    ******************************************************************************
    package day01;

    public class String_charAtHui {

    public static void main(String[] args) {
    //查看字符串是否为回文
    String info="上海自来来水自海上";
    /**
    * 此时会出现两种情况:即输出 不是回文,又输出 是回文。
    * 因为for循环输出后,是回文 一定会输出的。即使循环停了,是回文还是要输出。
    * 若加else,就变成摸着石头过河,走一步判断一次。
    * 此时,会有很4种情况。
    * 开关:
    */
    // String info="上海自来水来自海上";
    for(int i=0;i<info.length()/2;i++){
    if(info.charAt(i)!= info.charAt(info.length()-1-i)){
    System.out.println("不是回文");
    break;
    }else{
    System.out.println("是回文");

    }
    }

    }
    }
    *******************************************************************************
    package day01;

    public class String_charAtKai {

    public static void main(String[] args) {
    //查看字符串是否为回文
    String info="上海自来来水自海上";
    /**
    * 开关
    */
    // String info="上海自来水来自海上";
    boolean flag =true;
    for(int i=0;i<info.length()/2;i++){
    if(info.charAt(i)!= info.charAt(info.length()-1-i)){
    System.out.println("不是回文");
    flag=false;
    break;
    }
    }
    if(flag){
    System.out.println("是回文");
    }

    }
    }
    ******************************************************************************
    *******************************************************************************

    *******************************************************************************
    package day01;
    /**
    * boolean startWith(String str)
    * boolean endWith(String str)
    * 判断一个字符串是否是以给定字符串开始或结尾的
    * @author adminitartor
    */

    public class String_startsWith{
    public static void main(String[] args){
    String str ="thinking in java";

    boolean starts = str.startsWith("thin");
    System.out.println("starts:"+starts); //true

    boolean ends = str.endsWith("ava");
    System.out.println("ends:"+ends); //true
    }
    }
    *******************************************************************************
    创建 String_toUpperCase_toLowerCase.java
    *******************************************************************************
    package day01;
    /**
    * String toUpperCase()
    * String toLowerCase()
    * 将当前字符串中的英文部分转换为全大写或全小写
    * @author adminitartor
    */

    public class String_toUpperCase_toLowerCase{
    public static void main(String[] args){
    String str ="你好Java";

    String upper = str.toUpperCase();
    System.out.println(upper);

    String lower = str.toLowerCase();
    System.out.println(lower);
    }
    }

    *******************************************************************************

    创建 String_valueOf.java
    *******************************************************************************

    package day01;
    /**
    * Static String valueOf(...)
    * String提供了一组重载的静态方法valueOf
    * 作用是将java其他类型转换为字符串
    * 常用于将基本类型转换为字符串
    * @author adminitartor
    */

    public class String_valueOf{
    public static void main(String[] args){
    int w =123;

    String wstr = String.valueOf(w); //字符串"123",效率更高。
    System.out.println(wstr+4); //字符串"1234"

    double d=123.123;
    String dstr = String.valueOf(d);
    System.out.println(dstr+4);//"123.1234"

    wstr= w+ ""; //任何内容和字符串连接,结果都是字符串。这里要做计算。
    }
    }

    *******************************************************************************

    *******************************************************************************

    创建 StringDemo2.java

    package day01;
    /**
    * 频繁修改字符串带来的性能问题
    * @author adminitartor
    */

    public class String_substring{
    public static void main(String[] args){
    String str ="a";
    for(int i=0;i<100000;i++){
    str+="a";
    }
    }
    }
    *******************************************************************************
    GC泪奔了!
    直径内存溢出。内存释放完全听GC的。不管内存怎么回收的。
    int a = 1;(java,用完GC会收的。)
    int a = maloc1;(C语言)---开启四个字节的空间。若逻辑写的非常复杂的时候,有一段忘了。内存将永远被占用不被释放。你也不使用,也不让别人使用。(内存泄漏)


    GC垃圾回收器,java闲置的内存不如c强,这也是c程序员嫌弃java的地方。哈哈哈哈。你们java什么玩意,自己内存都控制不了,我们说对啊。自己控制不了性能何在?对啊,没有啊。那你们有什么好牛的?我们没有内存泄漏啊。你们呢?啊!
    内存泄漏?本身内存条每次想定义一个变量,不管是定义int型string型什么型,都得要开一段空间的,在真正在使用c语言的时候,比如想定义一个int变量,想调用一个myloge函数,跟内存申请四个字节的空间,内存说行,你在里面随便使,随便复制随便改可以。变量用完了,要出方法之前,跟内存说这段空间不用了释放。别的空间要使用,也能开辟。但是,如果你忘了,这段空间开了用完了,没和内存说,那好别人也不能使用,你这一辈子也不用,这段空间永远被占用,这就叫做内存泄漏。这种事情越来越多的话,你会发现你的可用内存会越来越少。

    所以电脑使用一段时间不关机,速度越来越慢的原因。然后硬盘发现读写数字越来越频繁。原因在于当我们发现硬件使用内存不足的时候,Windows会做一个很奇葩的事情,在你的硬盘上开一段空间做临时内存,在上面玩命读写,硬盘读写速度奇慢无比。
    这就是c语言的问题,你有内存泄漏,一旦程序员忘了。。。c语言程序员(素质好,烟头随手丢垃圾桶)java程序员(随手丢地上)GC(扫地大爷)


    创建 StringDemo2.java
    **************************************************************************************************
    package day01;
    /**
    * 频繁修改字符串带来的性能问题
    * @author adminitartor
    */

    public class StringDemo2{
    public static void main(String[] args){
    String str ="a";
    for(int i=0;i<100000;i++){
    str+=str; //一个变两个,2变4,4变8...16...32..
    }
    }
    }
    **************************************************************************************************

    一运行,干脆利索,outofmemoryerror内存溢出了,内存装不下爆了,宕机。c语言不会出现 这种问题,除非你开的空间确实超过内存了,那确实没有办法。否则人家随时用随时删。。。不会出现这个问题,但java就不行,内存不归我们控制,是GC说的算,而GC的工作我们又没有办法限制,所以说内存使用率没有c语言那么高效,原因就体现在这里。关键是咋整?

    这个时候我们就回过来埋怨java啦,你为字符串做的这个优化,对我频繁修改字符串来讲没有任何好处,你想想你要求我改变一次字符串内容你就要新建一个新对象,那如果我频繁创建就会有内存溢出风险了。重用性确实很高但是不得不考虑这种需求,一旦我有这种需求,随便一操作就有溢出。

    java就说字符串我就这样了。给你
    3:21:30


    java中用1.0版本,专门用一个类来频繁操作字符串的,于是SB就诞生了。专门用来频繁操作字符串的,全称叫做:StringBuilder
    用这个类可以在一个字符串中,去修改。不是所有修改都需要创建新对象,就在一个对象里。修改内容时,就往char数组里面添加就行。
    char数组用完后就可以扩容。

    增删改插

    *******************************************************************************

    package day01;
    /**
    * java.lang.StringBuilder
    * StringBuilder是为了解决频繁字符串对系统资源开销问题。
    * StringBuilder内部是一个可变的字符数组,可以通过扩容来实现长度变换,而不是每次创建新对象。
    * StringBuilder提供了方便修改字符串内容的方法。
    *
    * 由于String的特性不适合频繁修改内容(内存开销大),所以频繁修改字符串时应当使用StringBuilder来完成。
    * StringBuilder内部维护一个可变的字符数组,所有修改都是基于该数组完成的。
    * @author adminitartor
    */

    public class StringBuilderDemo1{
    public static void main(String[] args){
    String str ="好好学习java";
    StringBuilder builder = new StringBuilder(str);
    /*
    * StringBuilder append(String str)
    * 向当前字符串末尾追加给定内容
    * append()方法用于将给定内容拼接到当前字符串末尾。
    */
    //好好学习java,为了找个好工作!
    builder.append(",为了找个好工作!");

    //获取StringBuider内部修改好的字符串
    // str = builder.toString();
    // System.out.println(str);
    System.out.println(builder.toString());


    /*
    * StringBuilder replace(int s,int e,String str)
    * 将指定范围内的字符串替换为给定字符串
    * replace():将当前字符串中指定范围内的内容替换为给定内容
    */
    //换头不换尾
    //好好学习java,为了找个好工作!
    //好好学习java,就是为了改变世界!
    builder.replace(9,16,"就是为了改变世界");
    System.out.println(builder.toString());


    /*
    * StringBuilder delete(int s,int e)
    * 删除指定范围内的字符串
    * delete():删除指定范围内的内容
    *
    * 好好学习java,就是为了找个好工作!
    * ,就是为了找个好工作!
    */
    builder.delete(0,8);
    System.out.println(builder.toString());

    /*
    * StringBuilder insert(int index,String str)
    * 将给定字符串插入到指定位置
    * insert():在当前字符串指定位置插入指定字符串内容
    *
    * ,就是为了改变世界!
    * 活着,就是为了改变世界!
    */
    builder.insert(0,"活着");
    System.out.println(builder.toString());

    /*
    * reverse():翻转字符串
    * 当用回文的时候,就不用一个一个判断了。
    */
    builder.reverse();
    System.out.println(builder.toString());
    }
    }
    *******************************************************************************

    *******************************************************************************
    package day01;
    /**
    * java.lang.StringBuilder
    * StringBuilder是为了解决频繁字符串对系统资源开销问题。
    * StringBuilder内部是一个可变的字符数组,可以通过扩容来实现长度变换,而不是每次创建新对象。
    * StringBuilder提供了方便修改字符串内容的方法。
    *
    * 由于String的特性不适合频繁修改内容(内存开销大),所以频繁修改字符串时应当使用StringBuilder来完成。
    * StringBuilder内部维护一个可变的字符数组,所有修改都是基于该数组完成的。
    *
    * StringBuffer和StringBuilder
    * -StringBuffer是线程安全的,同步处理的,性能稍慢(多线程时使用)JDK1.0
    * -StringBuilder是非线程安全的,并发处理的,性能稍快(单线程时使用)JDK1.5出现
    * 执行的效果一样。
    *
    * @author adminitartor
    */

    public class StringBufferDemo1{
    public static void main(String[] args){
    String str ="好好学习java";
    StringBuffer builder = new StringBuffer(str);
    /*
    * StringBuilder append(String str)
    * 向当前字符串末尾追加给定内容
    * append()方法用于将给定内容拼接到当前字符串末尾。
    */
    //好好学习java,为了找个好工作!
    builder.append(",为了找个好工作!");

    //获取StringBuider内部修改好的字符串
    // str = builder.toString();
    // System.out.println(str);
    System.out.println(builder.toString());


    /*
    * StringBuilder replace(int s,int e,String str)
    * 将指定范围内的字符串替换为给定字符串
    * replace():将当前字符串中指定范围内的内容替换为给定内容
    */
    //换头不换尾
    //好好学习java,为了找个好工作!
    //好好学习java,就是为了改变世界!
    builder.replace(9,16,"就是为了改变世界");
    System.out.println(builder.toString());


    /*
    * StringBuilder delete(int s,int e)
    * 删除指定范围内的字符串
    * delete():删除指定范围内的内容
    *
    * 好好学习java,就是为了找个好工作!
    * ,就是为了找个好工作!
    */
    builder.delete(0,8);
    System.out.println(builder.toString());

    /*
    * StringBuilder insert(int index,String str)
    * 将给定字符串插入到指定位置
    * insert():在当前字符串指定位置插入指定字符串内容
    *
    * ,就是为了改变世界!
    * 活着,就是为了改变世界!
    */
    builder.insert(0,"活着");
    System.out.println(builder.toString());

    /*
    * reverse():翻转字符串
    * 当用回文的时候,就不用一个一个判断了。
    */
    builder.reverse();
    System.out.println(builder.toString());
    }
    }
    *************************************************************************************************


    SVN账号 每天写一写作业。

    SVN:版本控制软件,是一个项目团队共同配合完成一个项目使用的。

    有一台服务器,项目经理会在服务器上创建一个项目,刚开始只有框架,里面只有包,甚至连类都没有。
    这时候,要做的是,有几台计算机,都连上服务器。
    把项目档到本地每台计算机里,每个人负责一个模块,就只写自己的模块,其他人的不管。
    每天上传,与服务器同步,服务器上的项目就会检测其他人的与你的不同,不同的相互拼接。
    跟新项目,直到同步为止。

    要求代码不能报错。保证有效代码。

    ***********************************************************************************************

    鼠标右键--->other--->往下找SVN--->从SVN检出项目--->创建新的资源库位置--->
    URL:http://svn.tedu.cn/svn/1703se/stuxxxxxxx (输入服务器的地址)

    stuxxxxxx
    项目经理给的账号

  • 相关阅读:
    slf4j使用
    centos 安装 redis
    centos安装单机zookeeper
    activemq消息重发机制[转]
    maven 指定工程的 jdk 版本及编译级别
    Elasticsearch-索引新数据(创建索引、添加数据)
    Elasticsearch-数据的存储、搜索(干货)
    Yarn-本地获取任务日志
    Hive-Container killed by YARN for exceeding memory limits. 9.2 GB of 9 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
    Elasticsearch-安装、日志解读
  • 原文地址:https://www.cnblogs.com/sneg/p/7818680.html
Copyright © 2011-2022 走看看