用户看见的和你没有关系。客户端主要用来展现的,服务端(后台)。程序员是内在美,和外在美没有关系。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
项目经理给的账号