java基础

项目架构

CS:客户端+服务器端==》双端开发的项目C#stringString

BS:浏览器+服务器端==》只需要开发服务器端Web项目

技术板块

JDK

欢迎来到蜗牛学苑

String 字符串类型 存放有所有关于操作字符串的方法(工具)

java工具:

JavaSE:java最基本的工具(方法) 张三

类型功能实用工具的条件使用完后的结论

类型功能和名称参数返回值

next() nextInt() ==>分类Scanner

nextInt()随机产生一个整数===>分类Random

JavaEE:企业级项目开发使用的工具包包含了JavaSE的全部工具+企业级项目所需工具

JavaME :(嵌入式)针对于移动端设备开发所需工具包包含了JavaSE的部分工具+移动端开发所需工具

为什么java如此流行

1.面向对象2.简单易学3.自动垃圾回收4.支持多线程5.模块化开发6.函数式开发7.跨平台

SUN 美国斯坦福网络工程室后被 Oracle收购 MySql

java是如何实现跨平台的

针对不同系统提供有对应的虚拟机 程序是运行在虚拟机上的 而不是直接运行在系统中 因此会比C C++慢

组成

JDK:java开发【工具】包 Java Development Kit

JRE:java运行环境 Java Runtime Environment

JVM:java虚拟机

JDK 包含 JRE包含 JVM

如何开发java程序

1.编写 源代码==》我们能看懂 计算机看不懂 .java后缀 src文件夹 javac xxx.java

2.编译字节码文件==》我们看不懂 计算机可以执行.class后缀 java xxx

3.运行解释执行字节码文件

java 是 编译型语言 还是 解释型语言 都是

html解释型语言 浏览器

案例

编写代码 输出HelloWorld

1.创建记事本 编写java源文件 文件名为HelloWorld.java

//创建类
public class HelloWorld{
    //创建入口方法
    public static void main(String[] args){
        //编写输出语句
        System.out.println("HelloWorld");
    }
}

2.编译

在文件所在位置 导航栏 输入cmd 打开控制台

javacHelloWorld.java输入命令 编译源文件 获得字节码文件==》生成了 HelloWorld.class

3.运行

继续在控制台输入

java HelloWorld输入命令 运行class文件

配置环境变量

目的:希望可以在任何位置都可以编译运行java源文件

复制能看到bin一个路径D:\workSoft\java\JDK1.8.0_74_x64

打开系统环境变量界面 系统变量中新建 命名JAVA_HOME值为路径

找到系统变量中的Path 双击打开 新建 输入 %JAVA_HOME%\bin

全部保存关闭 重新打开CMD控制台 输入javac 回车 出现所有指令

注意:

1.注意大小写

2.所有标点符号必须英文

3.类名必须与文件名一致

4.所有括号成对出现 正确包裹

规范

换行 缩进

类名规范:首字母大写 如果有第二个单词 首字母大写例如:Test1HelloWorld

变量名规范:首字母小写如果有第二个单词 首字母大写例如:nameuserName sumScore

方法名规范:首字母小写 如果有第二个单词 首字母大写 添加()例如:main()showAge()

命名规则

只能由 字母 数字 下划线 $ 中文组成 不能以数字开头 中间不能有空格

练习

System.out.print();//会报错 print()小括号中必须放输出的内容

System.out.println();//可以不放任何内容 代表换一行

System.out.println("姓名\t年龄\t性别\t地址\n");

张三丰\t22男重庆

李四\t21女北京

王五\t25男上海

田七\t25女重庆

赵八\t25男重庆

豆豆\t21女北京

花花\t25男上海

什么是程序

1.为了达到一定的【目的】 一系列【有序】的【指令】的集合

2.对于数据的游戏规则(增删改查)的设定

数据的使用

什么是数据:一切有价值的信息

如何保存(缓存信息)使用数据

案例

保存 姓名 张三 年龄 22 性别 男 成绩 98.5

计算输出三年以后的年龄 输出距离满分差多少分

        String name = "张三";
      
        //String age = "22";
        int age = 22;
      
        //String gender = "男";
        char gender = '男';
      
        double score = 98.5;
        //String score = "98.5";
​
//      score = age;      
//      System.out.println(score);  //22.0
//      System.out.println(age);    //22
​
        score = 98.5;
      
        System.out.println("姓名\t年龄\t性别\t成绩");
      
        System.out.println(name+"\t"+age+"\t"+gender+"\t"+score);
      
        System.out.println("三年以后"+(age+3)+"岁");
      
        System.out.println("距离100分差"+(100-score)+"分");

练习

格式化输出以下信息

1.年龄性别成绩姓名

22男98.5张三

String name1 = "张三"; int age1 = 22; char gender1 = '男'; double score1 = 98.5;

System.out.println("姓名\t年龄\t性别\t成绩");

System.out.println(name1+"\t"+age1+"\t"+gender1+"\t"+score1);

20女100李四

23男89.5王五

int age1 = 22,age2=20,age3=23;

char gender1 = '男',gender2='女';

score1

name1

2.平均年龄:岁

平均成绩:分

System.out.println("平均成绩:"+变量名);

3.计算女生百分比

1*1.0/3*100+"%"

数据类型转换

1.自动类型转换

String nn = 15;

1》低级类型 可以直接存储进入高级类型double num = 15;syso(num);//15.0

String str = 15+""; String str = num+""; //错误String n = 15;

2》运算过程中 有低级类型 高级类型 运算结果自动升级为高级类型double num = 15+22.5;

51.0/100 0 0.05 5*1.0/8 ===> 0.625

8/5 1

2.强制类型转换

char c1 = '中'; int n1 = (int)c1; syso(n1);//20013

syso((char)20013);//中

值可转的情况下double num = 55.8; int n = (int)num;//55

char c = 'a'; int n = (int)c; char cc = (char)n;

高级类型 转为低级类型会损失精度

3.int char好兄弟

    每一个字符 对应的都有一个int类型的值
      
        'a'   97  
        'A'   65
        '0'   48
      
        0=='0'   false
      
    char c1 = '蜗';
    int i1 = (int)c1;   //34583
    syso(i1);
    char c2 = (char)i1; //蜗
    syso(c2);
    char c3 = 'a';
    syso(c3+100);   //197   而不是a97
    int n1 = c3+100;
    syso(""+c3+100) //a100  'a'升级为"a"   +为连接符
    syso(c3+100+"") //197
    String s1 = c3+100+"";
    char c4 = '9';
    syso(c4+10);//67  而不是19   因为'9'会转成int类型的57
​
​
​
    syso('a'>100);//false  会自动将'a'转为97 去比较

char 与 String

//基本数据类型 只有八个
//优点:值可重用 节省空间 效率更高
//缺点:没有方法
​
//引用数据类型
//官方提供除八大基本数据类型+自定义类型
//优点:有方法    引用传递
//缺点:需要使用new开辟空间
​
//学习方法的要素
//1.方法功能和名称
//2.方法所属的类型 ==》方法需要使用所属类型的对象调用     Random r = new Random();
//3.方法的参数   ==》参数就是会影响方法结果的因素
//4.方法的返回值  ==》有返回值的方法一般会声明同类型变量接收方法的返回值 供后续使用
​
//字符串方法
int length() //获取字符串长度  ==》字符串最小下标是0 最大下标=长度-1   
char charAt(int index) //通过下标获取字符串中某个字符  参数必须是存在的下标 否则报越界异常
    //StringIndexOutOfBoundsException
//String str = new String("abc");
//int    num = 10;
    String str = "abc";  
    char c = str.charAt(1);
    syso(c);//b
​
zhaZhi(int num,String fruitName)
zhaZhi(5,"苹果")
​
String str = input.next();
Random r = new Random();
​
int len = str.length();
​
int index = r.nextInt(len);
​
char zf = str.charAt(index);
​
String age = input.next();
age+5
  
int age = input.nextInt();
age+5
​
​
​
    基本 转 String 
    int n = 10;
    String ss = n+"";
​
    boolean b = true;
    String sb = b+""; //字符串true 不再具备真假判断能力
​
====================================================================================================
    String 转 基本
    String str = "10";
    int num = (int)str;//错误
    int num = Integer.parseInt(str);//在str值可转的情况下 可以通过int类型的包装类调用方法 进行转换
​
    char cc = str.charAt(str.length()-1);

案例

将上题用户信息 改为由用户输入 最后再展示

  
//导包  告知虚拟机 Scanner类在哪个包下面  ctrl+shift+o
import java.util.Scanner;
​
public class Test{
  
    public static void main(String[] args){
    //创建Scanner类型的对象
        int num = 10;
        //目前 所有的方法调用 都需要所属类的对象
        Scanner input = new Scanner(System.in);
​
    //1.友好提示
        syso("请输入您的姓名");
​
    //2.使用 接收输入的工具 来接受数据
    //Scanner类中的 next() 用于接收字符串
​
    //3.保存数据 使用数据
        //使用对象 调用方法 接收字符串
        String name = input.next();
        String str = input.nextLine();//整行接收 可以接收带空格的字符串
​
        int age = input.nextInt();//只能接收整数 输入其他类型会报错
​
        double score = input.nextDouble();//接收整数或小数
​
        char gender = input.next().charAt(0);//先以字符串接收 再通过字符串方法获取某个字符
        '男'
        gender == '男';
          
        String gender = input.next();//"男"
        gender.equals("男");
    }
}

常用类型

基本数据类型: 八个 没有自己的方法高效 省空间(值都来自于堆中常量池)

非基本数据类型(引用数据类型) 有自己的方法 每个对象都有自己的空间(占用空间)

JDK提供的非基本数据类型(Scanner String) 自定义类型(Test1)

int i1 = 10;

int i2 = i1;

i1 = i1+5;

syso(i1);//15

syso(i2);//10

String n1 = new String("张三");

String n2 = "李四";

数值类型

整数

byte 字节 IO流中使用 GBK 1字符2字节 utf8 1字符3字节

short 短整型

*int 整型【默认类型】 int num = 14; 1

*long 长整型long num = 123456123456L;

非整数

float单精度浮点型float num = 5.634F;

*double双精度浮点型【默认类型】

非数值类型

*char字符类型'男''开''a'',' '1'===》Stringint

*boolean 布尔类型truefalse

int num = 10;

String str = "abcde";

char gender = '男';

double score = 89.7;

boolean bool = true;

String n = input.next(); "男"

char gender = n.charAt(0); '男'

char gender = input.next().charAt(0);

String str = "中国你好";

//char c = str.charAt(2);

char c = str.charAt(str.length()-1);

练习

连续声明5个变量 保存5个年龄 分别为22 18 25 16 19

计算输出总年龄

计算输出平均年龄 平均年龄希望有小数位

声明变量 保存男生5人 女生7人 计算女生百分比

声明一个char类型的变量 char c = '5' //53

判断他是一个数字 还是 字母

syso(c>='0');//48
syso(c<='9');//57
​
syso(c>='a');//97
syso(c<='z');//122
​
syso(c>='A');//65
syso(c<='Z');//90

数一数 保存成年人人数 计算输出 所占百分比