黑马java课程2222

课程叫做27天学通java零基础

java 安装:
必须装jdk-7u72-windows-i586.exe
注意必须安装32位的就是i586这个.因为x64的不向下兼容.会有意向不到的bug

配置Path的方法
1.直接写Path里面
2.或者先建立一个系统变量叫做JAVA_HOME
然后在Path里面写%JAVA_HOME%\bin;即可.

jdk1.5之后不用配置classpath了!

最好也不要配置这个classpath,因为不灵活.一旦你在别处放class就bug!

path和classpath的区别:
path记录的是如可执行文件的位置,
dos里面运行可执行文件时候,现在当前目录找,如果没有就进入path目录里面寻找.
classpath是把.class文件放的位置.

故人西辞富士康
为学技术去蓝翔
蓝翔毕业包分配
你妈还是富士康

2018-11-23,21点19
学习流程:
先看27天学通java 零基础
然后看java web 24天.这些视频

goto 和const也都是关键字,不能作为名字

包名命名:

com.heima.包的作用

单引号中只能放单个字符,单个数字或者单个符号.不放也不行.

因为,把正数的首尾改成1表示负数后,两个数相加不是0.所以引入补码计算法.

Long x=888888888L 表示强类型转换成Long
System.out.println(12345+5432l);
注意上面最后的不是1而是L的小写.
所以最后加L强制转换最好加L,因为l太像1了.
如果非要区分注意l的横是平的,1的横是向下的.

只要是float f=12.3F;
后面的F是必须的,否则会识别成double类型.

经典题:

byte b=(byte)(126+4)
System.out.println(b);//打印-126

分析,首先b等于130
因为是b所以 是2进制 1000 0010 这个数字.
首位是1所以他表示的是负数.
注意计算机中存的数都是按照补码来存的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.

所以需要把这个麻求他的源码也就是
1000 0001 取反 1111 1110
除去首位符号位,就是111 1110
这个用windows 自带的计算器切换到程序员模式,
选2进制,输入111 1110即可,看到在dex 10进制模式下输出的就是126,所以算上符号位,我们最后输出的结果是-126!

下面我们算byte b2=(byte)300;
System.out.println(b2)

1.byte 与byte进行运算时候会提升为int
2.float 占4个字节,32个二进制位
1位是符号位,
8位指数为

其中0代表0 255代表无穷大,1-254表示指数
表示-126到127

23位是尾数为

浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 excess-127 二进制指数和一个 23 位尾数。尾数表示一个介于 1.0 和 2.0 之间的数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。
所以最大是2.0^127次幂.也就是尾数表达数字的指数表达数字次幂!!!!!!!!!!

double 最大是2^1024

字符串与任何相加都得到的是看做2个字符串相加结果!

2018-11-24,13点08
还是用vs code好,首先sublime的编码问题非常麻烦,第二sublime不支持调试,第三sublime写c++写java对于input都不支持.第四:运行各种文件还需要切换编译器,vscode自动能识别,加断电也非常方便.            

java里面char可以保存一个中文,因为java的编码默认是utf-8
比如char i=‘中‘;可以的

int x=4;
int y=(x++)+(++x)+(x*10);
答案y=70

当byte与int进行混合运算,赋值给int会损失精度报错
但是byte类型用++可以.因为系统会自动强制转换.

相同的道理
short s=1;s+=1;
System.out.println(s);可以运行,
道理一样.也是+=1是一个运算符,java内部自动加了一个强制转换符.

性质a与b异或2次那么答案是a

if 语句如果后面不写大括号,那么有意想不到的bug,
他只控制他后面的一句话,但是如果后面写int x=10;这种句子不行.
因为他表示的是2句话.但是加上大括号就可以了.

分好和大括号.有大括号就不写分号,有分号就不写大括号.

例如:
if (age>10){int x=10;}
if (age>10) x=3;

for (int i=1;i<=10;i++){
    System.out.println(i);
}
System.out.println(i);
注意for 语句执行完之后就析构i这个变量了.所以外面的print(i)是没有用的.

但是while循环后,里面的变量不会清空,还是存在的!

这就是标号的作用!!!!!!!!!!!!!!
下面一个点是很有用的Mark 来跳出外层循环.

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
  public static void main(String[] args) {
        outer: for (int i = 1;i <= 10 ;i++ ) {        //a就是标号,只要是合法的标识符即可
          System.out.println("i = " + i);
          inner: for (int j = 1;j <= 10 ;j++ ) {
            System.out.println("j = " + j);
            break outer;
          }
        }
  }
}
输出结果是i=1 j=1.用法:就是在for循环的左边写上outer: 然后break后面跟上outer;即可.就能直接跳出外层循环.

数组的初始化值:
byte,short,int,long默认都是0
浮点型默认都是0.0
布尔类型都是false
char默认是‘\u0000‘
引用类型的默认是null.比如二维数组,里面每一个一维数组默认值就是null

如果直接打印数组的名字那么返回类似一个
[[email protected]       这个理解:[表示是一个数组,几个括号[就代表几维数组, I表示内容是int  @没用 后面的是16进制的地址值

java内存的分配

栈(局部变量),堆(数组和对象),方法区,本地方法区,寄存器

数组的写法:
int []arr=new int[]{11,22,34,44,56};
int []arr2={11,22,33,44,55};这个是简写模式,这个模式声明和赋值之不能写在一行.否则报错.

这个java课程是黑马教育. 

当数组引用赋值为null之后,再去调用数组中元素,就会出现NullPointerException 空指针异常.

下面写一个二维数组的内存分配流程:
首先把main函数压栈
之后调用int[][]arr=new int[3][2];
压入main这个子块里面.
之后堆中开辟3个null组成的连续块,
之后这3个null分别变成一个地址.
每一个地址表示堆中开辟的1个长度为2的连续空间的地址.这个空间就是一维数组,还是上来都是0,然后随着赋值运算把0替换成赋值的数.

运行Car c1=new Car();
时候先在方法区建立Car这个类的Car.class
才能调用这个c1语句建立c1.

引用数据类型的总结:
数组,类,接口,枚举

匿名对象
Car c1=new Car();就是普通的创建对象
new Car.run();就是匿名对象的调用方法.

被public的可以被类外面访问
被private的只能被类内部访问.

经典的public private例子:
class Person{
    String name;
    private int age;
    public void setAge(int a){
        age=a;
    }
}
这个例子就是常用的套路,把数据前面写上private,来限制这个类外面直接用等号来定义这个属性的值.用一个public函数来访问这个privat值来修改,这样更安全.

这就是封装的意义.用private来限制使用.更安全.

this应用场景,用于区分局部变量和成员变量重名.

构造方法不能被对象调用.

当给与了有参数的构造,那么系统的无参构造自动不给了,所以如果写了有can的构造方法,那么无参的构造方法也要写上!防止bug

修改属性值,开发中用setXXX函数更多,因为他更灵活!

静态static关键字的特点
1.随着类的加载而建立
2.优于对象存在
3.被所有对象共享.
注意静态方法不能访问非静态变量!

构造代码块(对象创立就运行,优先于构造函数,比静态代码块靠后执行),静态代码块(随着类的加载而加载,且优先于主方法执行,类记载过了就不运行了,所以只运行一次),

开发原则:
高内聚,低耦合
尽量自己完成自己的事情,减少对其他类的依赖!

继承类的构造方法:
一定会继承父类的构造方法!
证明:
原因是默认会有一句super();
如果写this(可以加参数);表示利用自己的其他不含参数构造方法,但是如果所有都用this就会死循环bug,所以至少有一个不用this才可以,所以super()始终要运行一次.

经典习题:

class Test2_Extends {
    public static void main(String[] args) {
        Zi z = new Zi();
    }
    /*
    1,jvm调用了main方法,main进栈
    2,遇到Zi z = new Zi();会先将Fu.class和Zi.class分别加载进内存,再创建对象,当Fu.class加载进内存
    父类的静态代码块会随着Fu.class一起加载,当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载
    第一个输出,静态代码块Fu,第二个输出静态代码块Zi
    3,走Zi类的构造方法,因为java中是分层初始化的,先初始化父类,再初始化子类,所以先走的父类构造,但是在执行
    父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的所以
    第三个输出构造代码块Fu,第四个输出构造方法Fu
    4,Fu类初始化结束,子类初始化,第五个输出的是构造代码块Zi,构造方法Zi
    */
}
class Fu {
    static {
        System.out.println("静态代码块Fu");
    }

    {
        System.out.println("构造代码块Fu");
    }

    public Fu() {
        System.out.println("构造方法Fu");
    }
}

class Zi extends Fu {
    static {
        System.out.println("静态代码块Zi");
    }

    {
        System.out.println("构造代码块Zi");
    }

    public Zi() {
        System.out.println("构造方法Zi");
    }
}

很经典的题目:
顺序总结:先是所有的静态代码块按照父子顺序跑完,然后跑构造代码块父构造函数父,最后是构造代码块子构造函数子.
记忆当然很麻烦.分析原则.记住原则自己分析才实用性强.

1.首先是先有类才有对象,所以类必须都生成完毕才能走对象的构造.
所以静态代码块优于一切
2.之后才是对象的建立,涉及到构造函数,这时候先父全弄完才能弄子的.
3.对于父的对象建立,需要先构造代码块再构造函数.因为构造代码块的目的就是在构造函数之前做点什么.

vscode还有好处是按住ctrl左键点一下就能找到这个变量的定义位置.

林夕和鸟就是梦鸽
唱红歌搞定林夕和鸟女士

final 修饰类,那么他就不能有子类
final修饰方法,那么他的子类就不能重写这个方法.
final修饰变量,那么他就是常量.一般写法是public static final NUM=3.14

重载叫类内部自己写重名的来覆盖之前类里面写的函数.

多态里面蛋疼的:
成员变量:
编译看左边(父类),运行看左边(父类)
成员方法:
编译看左边(父类),运行看右边(子类),这个叫动态绑定

但是静态方法.就算不上重写.还是
编译看左边(父类),运行看左边(父类)

ClassCastException
类型强制转化异常.

利用instanceof来判断再保证转化的正确.

抽象类可以由非抽象方法.

为甚么要用抽象类,因为设置抽象类就是设置了限制.
定义好抽象类,那么写的子类就必须继承这些规则.达到了项目限制员工的功能.

面试题:
一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?答案:可以,这么做的目的只有一个,就是不让其他类创建本类的对象.
面试题2:
abstract和那些关键字不能共存?
1.abstract和static不能共存.
因为abstratct修饰的方法没有方法体.所以static没意义
2.不能和final共存.
因为final没法继承.但是abstract必须被继承
3.private也不行
因为继承的访问问题.同上

接口的含义:对外提供一种规则的就叫接口.

一流公司卖接口 2流公司卖品牌 3流卖服务

接口一般用法:#跟抽象类用法都一样!
class Demo1_Interface{
    public static void main(String[] args){
        Inter i=new Demo();
        i.print();
    }

}
interface Inter{
    public abstract void print();
}
class Demo implements Inter{
    public void print(){//这行的声明必须public
        System.out.println("print");
    }
}

但是:接口里面的变量都是publi static final 的

包的使用:
package com.heima;//必须写在第一行.只能写一个,开发项目必须写.把class文件放这个目录下

//带包的类的运行方法,在com统计目录时候cmd打开输入
java com.heima.Demo1.class

方便生成.class和文件夹的方法,直接在目录中
cmd 输入javac -d . Demo1.java

包的控制例子:
package com.heima;
import  com.baidu.Person;
class Demo1_package{
    public static void main(String[] args){
        Person p=new Person("张三",23);

    }
}

原文地址:https://www.cnblogs.com/zhangbo2008/p/10018005.html

时间: 2024-10-12 07:59:04

黑马java课程2222的相关文章

黑马java课程视频java学习视频

资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994 原文地址:https://www.cnblogs.com/raorao1994/p/10935085.html

老白的JAVA课程14 GUI 窗口的设置

项目驱动 需求分析-系统设计-编码-测试-维护期 GUI Swing程序的建立步骤 1.建立容器-可以容纳其他图形对象的类,容器中还可以添加容器 2.建立组件-组件就是一套图形对象 3.将组件放到容器当中-将创建好的对象添加到容器中,才能在窗口中显示 4.设置布局 JFrame:带有标题和边框的顶级窗口 JPanel:就是一个矩形的区域,其中可以包含图形组件,也可以包含其他JPanel JApplet:在浏览器中运行的容器 JScrollpane:一种可以实现水平或垂直滚动条的容器 JDiolo

老白的JAVA课程16 卡片布局 javaBean

基于组件的开发 javaBean 组成部件 规范   1: 必须要有一个公共的构造方法,javaBean这个类也必须是公共的   2:javaBean中的属性都是私有的,每一个属性都必须提供符合命名规范的set和get方法   3:应该是可序列化的,但是并不是必须的 类型:  1:简单属性javabean  set和get足够简单  2:绑定属性JavaBean  属性复杂,需要绑定其他属性  3:约束属性JavaBean  set和get方法有约束 cardlayout.show(父容器,按钮

老白的JAVA课程13 接口

之前我们讲到了java4大特征的最后一个抽象的特征,其实在抽象这个特征里面,我们还有一个特征-接口,今天我们就来学一学接口.  用电脑,手机等电子产品来比喻接口,可以更好的理解,比如用符合接口的插头就可以了.  接口具有很好的扩展性,方便.  接口的由来   例子:奥拓奥迪都是汽车,汽车的维护都是可以用调节引擎和更换汽油的方法,那么奥拓和奥迪也都可以:但是有了更多的维护对象以后,比如说大货车,卡车等等,其他的对象不一定需要每一步维护,或者都不需要维护:又比如不同枪支有不同特性的例子.  因此,我

老白的JAVA课程17 集合

集合 数组的缺点:长度限制 添加的类型有限制 集合自动变长 随意添加 但是数组的效率高,在游戏里用的比较多 SuperArry是一套的集合框架 两大类 接口 1 Collection  单一值的元素  1.1 list 有序的 放进去的顺序和里面的顺序是一样的 (不是传统的里面有没有顺序的意思)    可重复的    实现类 ArryList 1.2 set  无序的 里面和放进去的不是一样的    只能是不可重复的 2 Map  键值对 键 值  map的键是不能重复的 老白的JAVA课程17

java(课程设计之记事本界面部分代码公布)

代码:涉及记事本的一些界面......!! 1 /* 2 *java课程设计之记事本(coder @Gxjun) 3 * 编写一个记事本程序 4 * 要求: 5 * 用图形用户界面实现. 6 * 能实现编辑.保存.另存为.查找替换等功能. 7 * 提示:使用文件输入输出流. 8 */ 9 package project; 10 11 import javax.swing.*; 12 import java.awt.*; 13 import java.awt.event.*; //引用类设置触发事

Java课程设计—学生成绩分析系统

Java课程设计 - 我的选题是学生成绩分析系统. 下面是课程的需求图: 完成的这个小系统其实逻辑代码是非常简单的,唯一感觉有难点的地方在于涉及到了知识点比较多.当时只是匆匆地大概学了Java的一些基本知识,书上的例题和代码也没怎么敲过, 几乎都是在边做的过程中边学具体需要用到的东西: 其中感觉最麻烦的地方就是JTable.文件读取IO流以及绘图和给各个组件布局的时候. 另外还花了些功夫在UI上面:我这次是用到了substance.jar的swing美化包,想了解的可以百度下,网上有很多教程.

JAVA课程笔记_1

一 课程内容 set path查看路径信息:当编译一个程序或命令时,先从当前目录查找,如果没有,按path中的路径按顺序查找,先找到后就不查找后面的路径了. 可以将目录加入环境变量,set path="复制的路径" 可以在.java程序中编写多个类,当编译时,每个类生成各自的字节码文件. 由于多个类的字节码文件不利于管理,使用bin目录下的jar命令可以将多个字节码文件打包成jar包发布给其他程序员使用. 使用方法:先在命令提示符下输入jar,会出现使用方法和实例.Jar打包两个cla

Java-第三章-刘珊珊同学参加了Java课程的学习,她父亲和母亲承诺

import java.util.*; public class lianxi72_5 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner inport = new Scanner(System.in) ; System.out.println("请输入成绩"); int math =inport.nextInt(); if(math>=100) { Syste