java基础

java 发展史  sum公司   创始人  詹姆斯-高斯林

java 8.0 公司中使用的最多

java跨平台原理

java 语言  通过 jvm 虚拟机  向不同的 平台发布东西  实现跨平台原理  

win版 jvm  mac 版jvm  linux 版jvm

jdk jre jvm 关系

jdk 用来开发的  jdk包含jer  ,  jre就是运行环境  

jdk中(javac 用来编译   java 用来运行)=====>编译后运行的虚拟机jvm

jre(包含 jvm  跟核心类库(类))  总结 我们只需要jdk 就够了

jdk库

www.Oracle.com 甲骨文中文网

Doc命令

cd 文件名   (进入)   cd..  返回上一级    cd / 返回根目录    cls  清除dos窗口

注释

// 单行注释  

/* 文本 */ 多行注释

/** 文本 */ 文档注释

关键字

plublc  class  类名 {

        public void main String([] args){

        }

}

常量

整数, 小数 , 字符串("双引号包裹的") ,字符('单引号包裹的') , 布尔 , 空常量  

空常量 是不能直接输出的(记住)

数据类型

基本数据类型

数值型 ===>  byte  short  int   long  (整数)    float   double    (浮点数)     char(字符)   String  字符串 

引用数据类型

class 类   interface  接口    [] 数组   Object 对象

变量

System.out....("20")=====>System.out....("10")

System.out....("20")====>System.out....("10")

System.out....("20")=====》System.out....("10")

上面这样变换的时候  ====》 很麻烦  有没有一个 位置可以保存这个值 

暂存位置 就是 变量  变量存放在  内存里面====》

变量  就是内存的一小块 地方 (开辟空间)

整数 默认 是 int 类型的  小数默认是 double 类型的    

变量的应用

这个位置  必须有 名字  ,  数据类型  ,  具体的值  

数据类型  名字   =  值  //声明变量  

名字 = 值;//变量的修改

默认类型的修改

long   再数后 加 L   float  数后面 加  F

标识符

1.由数字 字母  下划线   和  $ 符号组成

2.不能由数字开头 

3.区分大小写

4.不能是关键字

驼峰命名法

第一个单词的 首字母小写  其他的首字母大写

byte===》short===》int ====》long===》float ====》double  自然转换 小到大没问题

char===》int===》float===》long====》double  自然转换 小到大没问题

从大到小 ====》需要强制转换  (类型)  不推荐===>会有数据丢失

算数运算符

 最基本的  加 减 乘 除 取余   

除===》得到的是商  (要想得到小数必须是 double 小数型)否则就是整数

取余 得到的是余数   6/4  余数是 2

字符加操作

字符 ‘单引号包裹的’  

字符 进行加减运算的时候 是把字符转换成计算机底层的 数字进行加减 

char a = ‘c’+1//这个写法不对  当一个运算表达式出现多种类型的时候 这个表达式的类型会被整体提升  位表达式里面有的最高数据类型  

int a = 'c'  +1  就可以运行//这里面的最高数据类型 是 int 的数据类型

字符串加操作

字符串 + 数字 都是字符串的拼接   

字符串后面的是 字符拼接 ===》 ”我“+111=我111

字符串前面的数字  加 是  先运算 后拼接   ===》1+99+我 = 100 我

扩展的运算符

short a =10//  含义是 将10 这个值 赋值 给 short 类型的 a

扩展运算符号 隐含了(类型提升数字默认是int)强制转换===》他会出现无法运算 有可能会数据类型整体提升 ===》

可以用 (数据类型)(转换的式子)===》强制转换

自增自减运算符

自增,自减在前 先自增 或自减 再赋值,

自增自减在后 先赋值 再自减自增

逻辑运算符

& 与  | 或  ! 非  ^异或

&与  有false 则false

false $ false ==>false

false $ true==>false

true $ false ==>false

true $ true ==>true

| 或 有true 则true

false $ false ==>false

false $ true==>true

true $ false ==>true

true $ true ==>true

^异或 相同则是false 不同则是true

false $ false ==>false

false $ true==>true

true $ false ==>true

true $ true ==>false

! 非 相反值

false ===>!false ====>true

true====>!true====>false

短路逻辑运算符

int i =10

int j =20

输出(i++>100&&j++>100)===>false&&false===>false 短路与

输出(i,j)===>i=11  j= 20  短路与 如果左边是false 右边不执行

输出(i++>100&j++>100)===>false&&false===>false

输出(i,j)==>i=11,j=21

短路与 左边是false  右边不执行  

短路或 左边是 true 右边不执行

三元运算符

表达式 对执行左边错执行右边? 左边值:右边值 

Scanner  接收器

首先导包 import java.util.Scanner

Scanner scanner = new Scanner(System.in)

scanner.nextin()//定义好输入的是  啥类型的

顺序结构

选择行业 ===>到底走那条行业的路===>最终选择java

电风扇 为啥挥动 ====>循环重复的旋转

代码 从上往下 ===>顺序结构

if条件分支

if(表达式){

        执行语句

}

不会影响后续的

1.练习====>判断输入的是技术还是偶数

多条件分支====>  多个

第36集

switch 语句

switch(){

case 值:........

        语句体

break;

default:

        执行语句体

}        

case====>比较  值用来

break;跳出当前的语句 中断执行语句

default;表示没有符合的语句 默认执行的一句 默认值

case 有穿透 没有break 就会一直执行下去  但是也有好处 比如多个 值相同的答案情况下 

case:1

case:2

case:3

 System.out.prinlt("输出语句")   这样 1,2,3===>都是执行这一句   (春夏秋冬案例)

循环语句 for

for(初始化语句;条件判断;条件控制){

如果条件 ===>true 执行  false  ====>不执行

}

水仙花数

for (int i =100;i<=999;i++){
            //条件 是一个三位数
            //条件 百位数 的3次方+十位数三次方+个位数三次方= 数 的本身
            //371 ===>个位数  371%10
            //371====> 371/100 整除
            //371====>371/10===>37%10===>得到十位数
            int g = i%10;//个
            int b = i/100;//百
            int s = (i/10)%10;//十
            if(g*g*g+b*b*b+s*s*s==i){
                System.out.println("水仙花数"+i);
            }
        }

while  循环

while(判断条件){

        代码控制再这里面

        代码执行体  

},

案例 珠穆朗玛峰

//单位是毫米
        double i =0.1;//纸张的厚度
        int count =0;//折叠的次数
        //珠穆朗玛峰  为 8844430毫米
        while (i<=8844430){
            count++;
            i*=2;
            System.out.println("当前为"+i+"毫米");
        }
        System.out.println("折叠的次数为"+count);

do  while 循环

do {

循环体执行代码

循环控制

}while(判断是否执行继续)

最常用的 死循环 是while死循环   cmd 里面 按 Ctrl+c是终止死循环

控制循环的 关键字

break //到达什么条件 终止 这个循环

continue//跳出当前 循环 继续执行代码体

return //终止当前循环  并返回结果

循环嵌套

各种语句 嵌套   任何一种语句都可以看成  一个输出 简单的语句 

所以可以循环 或者 条件嵌套使用 

循环 渐进代码

        输出(0时0分)

        输出(0时1分)

        输出(0时2分)

        输出(1时0分)

        输出(1时1分)

        输出(1时2分)

        输出(2时0分)

        输出(2时1分)

        输出(2时2分)

上面的 多个条 依次执行  ====>  可以改编成  用for循环执行的语句  双重for循环

案例====> 小时 ====>分钟 每个小时 输出  60 个分钟

random 随机数

         Random r =new Random();
        int random = r.nextInt(10);
        System.out.println(random);

随机数 ===>nextInt(数值)===>包含0  但是不包含你设置的这个数

猜数字案例

Idea 快捷键 辅助键

ctrl + Alt + space ===>代码提示 再次出现

ctrl + Alt + L  代码重新排版

删除 创建 模块 ===>可以创建多个模块

数组 动态初始化

int [] arr = {1,2,3,4} 数组的声明  直接声明 好数组里面有几个

数组数据初始化 就是赋值

动态初始化数组

int [] arr = new int [11]//初始化了数组的长度

 public static void main(String[] args) {
        int [] arr = {1,2,3,4};
        System.out.println(arr);
        int [] arr2 =new int[11];
        /*
        * int数组的类型
        * []说明这是数组
        * arr2数组的名称
        * new 开辟新空间
        * int 类型
        * [11]数组的长度
        * */
        System.out.println(arr2.length);
    }

数组的访问

索引 访问 数组[suoyin] 就是访问  

数组[索引]=值  ====>赋值

java的内存分配

数组的内存分配  new  就是开辟新空间  再开辟新空间后 会给数组默认赋值===>

int 类型的是  0

boolean 类型的是 false

double 是0.0

字符:默认是空字符

引用类型默认是 null

先指向地址  ==>从0-n依次找

 堆内存===> new 出来的实体 存放在 堆里面 然后 使用后会再垃圾回收器空闲时间自动回收

 栈内存===> 等号左边的 定义的变量 存放在栈内存里面 存储的是局部变量 使用完毕 立即消失

数组的单个赋值

 创建 数组arr   直到把 001 地址赋值给arr 完成第一步

数组是引用类型 输出的是地址一个 

多个数组指向同一个地址

声明好了一个 数组 后  采取等于 的方式 赋值  比如  arr1  = arr2  

是  arr2把 自己的地址 给了 arr1  修改 arr1的每个值  arr2的 值 也会发生改变 因为是同意个地址

数组静态初始化

int [] arr = new int []{值,值}

int [] arr2 = {值,值,值}

数组常见的问题

如果数组 长度 没有 我们想要的索引值   就会出现 索引越界问题

访问的数组  是通过地址 访问的 如果地址 赋值 为了null  就找不到这个地址了  如果强行访问就会空指针异常

方法创建

public static void main(String[] args) {
        addUser();
        comper(10,21);
    }
    public static void addUser(){
        System.out.println("我是添加用户");
    }
    public static void comper(int num1,int num2){
        //比较大小
        if(num1>num2){
            System.out.println("num1大于num2");
        }else {
            System.out.println("num2大于num1");
        }
    }

方法的传参===>上面写的是什么类型的  你就要传递什么类型的 有几个参数 就要传递几个参数

 public static int adduser(){
        /**
         * 增加用户 方法 只要有返回值  必须 void 变成跟返回的类型相同的类型 
         * 否则代码就会报错  return 的值 类型 === 方法的类型 void 是无返回值
         * 
         * */
        
        return 10;
    }

return 的是给了方法  ===>我们需要用相对的变量 负责接收他 也要用相对的类型 接收

if  跟 else 里面 都需要 写相对的 返回值

return  的就是 方法  =====>

方法的重载

当 创建的 方法名相同  参数或者 参数个数都不相同时  就是方法的重载  

方法的重载 跟返回值类型 没有关系

面向对象的类跟对象

类==>他是泛指 广泛事物中 有相同属性的一类东西   比如手机 手机都有属性 方法 

属性  型号 像素  版本 等  行为  打电话 玩游戏  发短信 都是手机这一类常有的公共方法

对象===>他是指 再广泛的一类中特别指 的某个对象 ===>比如说 这个小米手机 

针对性的指 这个小米手机 ===>我们 开发的时候 就是面向对象开发 我们不需要知道 

手机怎么做出来的我们只需要会用就好了  

创建一个学生类 并使用它

package 类对象;

public class Student {//学生类
    //属性
    String name;//名字
    int age;//年龄
    String hobby;//爱好
    //行为方法
    public void play(){
        System.out.println("我会玩");
    }
    public void eat(){
        System.out.println("我会吃");
    }
}




package 类对象;使用 这个类

public class 创建学生类 {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.name="卢贝";
        stu.age=24;
        System.out.println(stu.name);
        System.out.println(stu.age);
        stu.play();
        stu.eat();
    }
}

单个 对象解说

比如上面的 学生类  我要再 main方法中 调用 学生类 

一开始 我们的main方法 加载到 栈内存中去  然后 Student  stu 再 栈内存中 里面有个地址指向 

new  student()  再 堆内存中 堆内存里面有 相关的  Student的对象的相关属性并且有默认值

如果 调用 stu.的方法()=====>这个方法执行===>进入 栈中当执行完方法后  消失  剩下的方法依次一样  ====>最后所有的方法都执行完毕后 ===>main方法 才会再栈内存中消失

栈内存中的 方法 只要执行完毕后 就会立即消失掉 

堆内存中的方法 不会 他需要等垃圾回收器来回收他

指向的地址 是一样 就相当于修改的相同的 地址的数值

成员变量 跟局部变量

成员变量===又叫全局变量

类中位置 不同 成员变量 是类中 方法外   局部变量是 方法内或者方法的声明上

内存中位置不一样  成员变量 再堆内存里面    局部变量 再 栈内存里面

生命周期不同   随着对象的存在而存在 对象的消失而消失   局部变量是随着方法的调用而存在方放的结束而消失 

初始化值不一样   成员变量有默认的初始化值       局部变量没有默认的初始化值必须先定义赋值,才能使用

封装

封装 里面需要 有 private 这个关键字 他是 变量 私有化 

加了这个关键字的变量 只能这个类中的 方法访问这个变量 或者修改  可以在方法中写判断

看看 是否是否符格式

我们可以再 类中 创建 私有的方法  ===>就修改访问我们类中的 私有属性

package 类对象;

public class iphone {//手机类封装
    private String name;
    private int age;

    public void setName(String a){
        name=a;
    }
    public void setAge(int b){
        age=b;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

不可以 用相同的参数名字  如果重名了 可以使用 this.来解决冲名字的问题例如

package 类对象;

public class iphone {//手机类封装
    private String name;
    private int age;

    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

this关键字

this.修饰的 变量名字 指代的是 成员变量  

局部变量 与 成员变量 相同时 ==>方法里面的 name  指的是  局部变量

当方法上 没有 局部变量的 时候 return 的变量  指的就是 成员变量  

this.就是用来 解决 局部变量 隐藏 成员变量的问题

再  经过 类 创建 对象 的时候 main 方法 进入 栈中 ===>new student  进入 堆中 

创建对象  会生成一个地址 ===>001   

每一个  set方法里面的 this  指向的就是 创建的对象的地址  

封装

封装  是 对客观事物的模拟  外部是无法直接访问的

封装的原则  不允许 外部访问 想要修改 内部的成员变量 必须通过 自己的set  get 方法 来修改

封装的好处 通过方法来控制成员变量 提高了代码的安全性  

把代码 用方法进行封装 提高代码的复用性

构造函数

构造函数 ===>public   类名 (){

                这是 无参构造函数

        }

构造函数  默认只要创建对象 就 自动调用

每一个类 都默认有一个 构造函数 ===>但是当 我们创建了 有参构造函数后 我们想要调用 无参数的构造函数 我们就需要 自己 手写了

再 创建对象的 时候  new Student()==>调用无参的构造方法  

new  Studengt("卢贝")====>调用有参的构造方法

如果 定义了 构造方法 系统就不再提供 方法 

标准类的制作 !!!!!

public  类 {

private  String name ;

private  int  age ;

        public 类名 (){

        

}

get方法 

set 方法

}

继承

多态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值