当前位置:   article > 正文

Java1-35 Java学习笔记

Java1-35 Java学习笔记

day1

win7 192.168.218.171
win10 192.168.218.204

内网通文件目录:C:\Users\Public\Nwt\cache\recv
Eclipse:C:\Users\Administrator\workspace
因为下载Notepad++而出来的垃圾安装包:C:\Users\Administrator\AppData\Local\Temp\gzss

环境配置

环境变量 下面(系统变量)新建名字:JAVA_HOME变量值为jdk安装位置
新建名CLASSPATH变量值为:.
打开path在变量名最后加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

第一个Java:Hello

先编译javac后解释java的语言(Java)

变量

整形(bype:1字符,short:2字符,int:4字符,long:8字符),浮点型,字符型(char:2字符),布尔型(boolean:true false)
引用数据类型:类(字符串),接口,枚举,数组

自动转换(没有缺点)
强制转换(有缺点 如long转成int会产生精度损失)

要求:
1: 熟记JDK,JRE,JVM之间的关系
2: 熟记Java的数据类型,并能全部手写出来
3: 熟记变量的使用
4: 数据数据类型之间的转换,明白什么是自动转换,什么是强制转换

day2

1.final修饰的变量是常量,值不可以改变 final int m;
2.%取余
3.i += 50 为 i = i + 50
4.byte b = 5;
b = b + 5会报错 因为5是int类型
5.
i=5
if(i++)判断时先使用i(判断i)后自增
if(++i)判断时先自增后使用(判断i)i
6.字符串链接符 +
7.
常量池中的数据只有一份
可用new来开辟堆中的空间
8.str.equals(str1)判断字符是否相等,字符判断不可用==
9.逻辑运算符 &&(短路与)与&(位与) A&&B A为false时B不执行
A&B不管A为什么B也会执行 ||与|同理

day3

字符串转换为int

Integer.parseInt();string型字符串转换为int

day4

尽量不要使用while(true){}

Switch()可以使用嵌套

Switch()case里面如果没有break程序会继续向下面进行直至遇见break或者结束。

需要用到if()时简单的都可以用三目运算符替代A条件D?C:B;

Math.random()* n 生成0到n的数字(为小数)

day5

Arrays:是JRE提供给我们的一个工具类,专门用于操作数组的,里面提供了很多与数组有关的方法。
* Arrays.toString(array): 可以将数组转化成字符串。
* Arrays.sort(array); 可以将数组的元素进行升序排序。
* Arrays.binarySearch(array, 487); 返回元素在数组中的下标位置,如果是负数代表不存在,二分查找,需要有序。
* Arrays.fill(array,555); 将数组内的元素都变成555
* Arrays.copyOf(array, 10); 复制一个新的数组,长度为10,并且在有效长度之内新数组的值与老数组相同
* Arrays.copyOfRange(array, 2, 10);从下标2开始拷贝,到下标10截止,将内容复制到新数组中,长度不够用默认值补。
* Arrays.equals(copyOfRange, copyOfRange2) 对比数组中的值是否相等。

day6

昨日内容回顾:
1: while循环以及do while的区别,以及使用
2: 数组的动态实例化以及静态实例化,数组的使用
3: Arrays工具类的使用
4:冒泡排序以及选择排序

今天内容:

1:类与对象

今天早上我去吃饭,我遇到一个人请问我遇到的是谁?如果这样去问,大家肯定不知道我遇到了谁,
因为人这个概念太模糊了,如果我说今天早上我去吃饭我遇到了关思思,大家知道我遇到谁了么?
此时人这个概念被具体化成了关思思,这样大家都知道我遇到的是谁了。
人:
属性:性别,年龄,身高,体重
行为:吃饭,睡觉,说话
如果只是说人的话,那么人虽然有所有的属性以及行为,但是这些属性基本上都没有具体的值。

关思思:
属性:女,18,158,80
行为:吃饭,睡觉,说话
但是如果我们根据人的这个模板生成了一个具体的对象,就可以给这个对象赋值了。

猫:年龄,颜色,品种,名字
tom:81, 蓝色,短毛猫,汤姆

类:是一个非常抽象的概念,我们没有办法指着类去说它具体是指谁,因为类指向的是一个大体,类
里面抽离了所有实例对象的共有特征形成了属性,而在类中这些属性是没有具体值的,因为这些属性
虽然写在类中,但是属性具体的值却属于通过类实例化出来的对象。

对象:通过类创建出来的实例(对象就是类的实例化体现),类是比较抽象的概念,而对象却是一个具体的
概念,每个对象都有自己的属性,与其他对象无关。

我们可以简单理解成:
类是一个设计图纸,这个设计图纸上虽然标注的有形状,样子,等很多属性,但是在图纸上并不是真实存在
的,如果我们通过设计图作出了真正的产品,那么产品的值就是真实存在在的。

一:类主要是由属性(变量),方法,代码块组成。

变量的划分:

全局变量

​ 1:直接声明在类中,其作用域是整个类。
​ 2:全局变量是由默认初始值的(不需要初始化也可以直接使用)。
全局变量有两种
​ 1:被static修饰的变量,存储在常量池之中,被所有对象共享,并且可以直接通过类名调用。
​ 2:没有static修饰的变量,存储在堆内存中,每个对象都有自己的一份,不会共享,只能通过
​ 对象名.调用。

局部变量

​ 1: 一般声明在方法之内,作用域一般都是声明时候的作用域,例如如果直接声明在方法中,作用域
​ 就是整个方法,如果声明在方法体中的for循环作用域里,变量的作用域就只是这个for循环。
​ 2: 局部变量没有默认初始值,这就是说局部变量必须初始化之后才能使用。

static

什么时候使用static修饰变量?

1:由于static修饰的变量在内存中只有一份,只要有任何一个对象修改了就都会被修改,所以我们
一般会在static变量前面加上final,让其禁止修改。
2:只有在工具类中,定义某些方便使用,但是又不需要被改变值的变量,才会使用staticfinal定义,
例如Math类中的PI常量等。

方法

1:实际上方法就是指,将一些功能性代码封装起来,方便以后反复使用。
2:我们的所有代码都在一起,看起来会非常凌乱,如果我们将每段代码都封装成一个方法,这样代码
看起来就会方便很多。
例子: 如果没有方法的话,每次我们使用冒泡排序都需要写一堆排序的代码,用10次要写10次,非常
麻烦,但是如果我们将排序的代码封装成一个方法,那么以后当我们需要排序的时候直接调用方法
就可以了,不需要在重复写排序的代码了。

方法的语法: [] 代表可选
[访问修饰符] [static] 返回值类型 方法名([形参列表…]){
方法体
}

访问修饰符

主要用来控制方法可以被哪些类访问到。
1:public 公交车,谁都能乘坐。 代表本项目中所有的类都能使用这个方法。
2:protected校车,只有校内能乘坐。 代表本包下所有类,以及其他包下的子类对象能使用这个方法。
3:无 专线车 代表本包下所有类都能使用这个方法。
4:private 私家车 代表只有本类中能访问到这个方法。

返回值类型

决定的是,当方法执行完成后返回给调用者什么类型的数据。
1:当我们写方法的时候,想返回给调用者什么数据,就写什么类型即可。
题目:
(1)写一个方法,最后返回长度为4的字母+数字组合的随机验证码。 答:返回值应该是String。
(2)写一个方法,最后返回两个数的乘积。 答:返回值应该是int 或double。
(3)写一个方法,用来返回类中所有属性拼接的信息。 答:返回值应该是String。
(4)写一个方法,这个方法最后会返回一个Dog类对象 答:返回值应该是Dog。

2:如果方法有返回值的话,在方法的最后需要使用return关键字,将数据返回给调用者。
题目:
(1) String str=“随机生成的验证码”;
return str;
(2) int j=ab;
return j; 或者 return a
b;
(3) return “Dog[age=]”+age+",name="+name;
(4) Dog d = new Dog();
return d;

3:如果方法执行之后,不需要返回调用者数据,使用void关键字来表示这个方法没有返回值。
4:如果方法使用了void关键字,就可以不需要return数据了。
5:有返回值的方法,执行完成后会变成对应的数据,我们可以将其放在输出语句之中,或者使用
变量接收方法的返回值。

方法名

​ 标识符之一,自定义的根据命名规则其即可。

四:形参列表 调用方法的时候,需要方法的调用者传递给我们什么值,就写什么。
方法中有时候需要使用一些数据,而这些数据需要方法的调用者传递给我们,此时我们就可以将
这些数据定义在形参列表中。
例如:计算A 与B 的乘积,那么A和B肯定要由方法的调用者传递给我们,我们才能计算,此时就可以
在形参列表上定义A 和B两个变量。
例如:给int数组排序,那么int数组肯定是由方法的调用者传递给我们,我们才能排序,此时我们
形参需要定义一个int数组。

方法体

方法想实现什么功能,就写什么代码。

静态

1:被static修饰的方法,叫静态方法,可以使用类名直接调用,同时也可以被对象调用。
2:被static修饰的方法,无法直接访问实例成员的属性(无static修饰的属性)以及实例方法。
3:没有static的方法,叫实例方法,只能使用对象调用。
4:实例方法可以访问所有的变量以及方法。

构造方法(构造器): 构造方法是专门为了创建对象而存在的。
1: 构造方法没有返回值类型的说法,因为他就是为了创建对象而存在。
2: 因为构造方法必须创建自身类的对象,所以要求构造方法的名称必须与类名一致。
3: 如果类中没有写构造方法的话,会自动生成一个默认的无参构造方法。
4: 构造方法可以重载。
问:构造方法主要的用处是?
答: 主要的用处就是用来给刚创建出来的对象属性进行赋值。

this:当前使用的对象,代码执行到哪个对象的时候,this就代表谁。
1:使用this.属性,可以调用当前对象的属性。
2:使用this.方法(),可以调用当前对象的方法。
3:使用this() 是调用自身的构造方法,需要注意,调用自身的构造方法只能在构造方法中调用。
4:静态方法中没有this,只有实例方法中以及构造方法中才有this的存在。
问:什么情况下使用this
答:当我们方法中的局部变量名与全局变量名冲突的时候,如果想使用全局变量需要使用this关键字。

要求

1: 个人笔记。
2: 代码三遍。
3: 定义工具类MyArrays实现方法如下
3.1: 可以对所有类型的数组进行升序排序
3.2: 可以对所有类型的数组进行降序排序
3.3: 可以将所有类型的数组的数据转化成字符串然后返回
3.4: 可以从所有类型的数组中查询元素是否存在,如果存在返回下标,不存在返回-1

day7

面向对象的三大特征:

一:封装
1: 将一组对象的共有属性以及行为抽象成一个类。
2: 将属性私有化,提供公开的方法来访问属性,方法的要求是: 
2.1 赋值的方法名要set开头后面跟上属性的名字以name举例:setName
	由于要给属性赋值,所以赋值的方法肯定是有参的,无返回值。
2.2 取值的方法名要get开头后面跟上属性的名字以name举例:getName
	由于要取出属性的值,所以取值的方法肯定是有返回值的,并且无参。
3: 将一组功能性代码,封装成方法方便以后反复调用。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
二:继承
是指孩子从父辈或者爷爷等祖辈继承下来的一些家产,也就是指孩子可以使用父辈的一些东西,现实中一般人只能继承自己亲生父辈的家产,而现实中每个人都只有一个亲生的父母,也就是
说一般情况下每个人只能继承1次。
Java中的继承是指,子类可以使用extends关键字去指定自己的父类,然后继承父类的非私有属性以及方法。
1: 每个人只有一个爹,所以Java只支持单继承,也就是说我们的类只能继承一个类。
2: 但是每个爹都可能会有很多个孩子,所以每个类都可以被继承多次。
3: 现实中每个人肯定都有父亲,在Java的类中每个类也都有父类,如果我们的类没有指定父类,默认会继承于Object,所以Object类是所有类的超类(基类)。
4: 子类可以从父类继承方法,如果子类对父类的方法功能不满意,可以选择重写父类的方法,如果子类重写了父类的方法,在调用方法的时候会先调用子类的方法实现。
5:  构造方法不能被继承。
6:  **在创建子类对象的时候,JVM会调用父类的无参构造创建父类的实例化对象,然后在去实例化子类对象。**
7:  如果父类没有无参构造,我们需要在子类的构造方法中使用super来显示的调用父类的构造方法。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
super:代表了父类对象
super()  	表示调用父类的构造方法
super.属性	表示调用父类的属性
super.方法()	表示调用父类的方法
  • 1
  • 2
  • 3
方法重写:

​ 1: 重写是发生在父子类关系之中的,方法名称需要与父类方法名一致。
​ 2: 形参列表需要与父类一致。
​ 3: 返回值类型需要与父类一致。
​ 4:要求子类的访问修饰符不能比父类更严格。
当我们将对象放入到输出语句的时候,默认会自动调用toString方法,那么我们只要重写toString方法,让toString方法返回对象信息的字符串,就可以实现输出对象的时候直接输出对象
的所有信息。

final关键字:

1:修饰在变量上,让其变成常量。
2:修饰在类上,final修饰的类不能被继承,String就是被final修饰的所以不能被继承。
3:修饰在方法上,final修饰的方法不能被子类重写。

static关键字:

1: static修饰在变量上,变量会变成静态成员,可以被类直接调用。
2: static修饰在方法上,方法会变成静态方法,可以被类直接调用。
3: static修饰在类上,叫做静态类
4: static修饰在代码块,叫做静态块。

代码块:Java中代码块分为4种

1:静态块 直接写在类中,被static修饰的代码块,只有在类第一次被加载的时候会执行一次。
2:构造块 直接写在类中,无任何修饰的代码块,每次创建对象的时候都会执行一次。
3:普通块 写在方法之中,可以避免方法中的变量名冲突,但是同时也局限了变量的作用域。
4:同步块------预留后期多线程时候将
静态块–优先所有–>构造块—优先自身—>构造方法

三:多态

见day11

day9

内部类

day10

接口与抽象类区别

接口中的常量默认被public static final修饰

接口中的实例方法必须被default修饰,default前面默认存在public,并且只能为public。

接口中的静态方法必须是public修饰符

接口中的抽象方法默认被public abstract修饰

/**
 * @author Administrator
 * interface:用来表示这是一个接口
 * class     :用来标识这是个类。
 * 接口和类的区别:
 * 1.接口中只能有常量,而抽象类中可以有成员变量。并且接口中的常量默认被public static final修饰,而抽象类中可以有成员变量。
 * 2.接口中的实例方法必须被default修饰,default前面默认存在public,并且只能为public。而抽象类中实例方法随意。
 * 3.接口中的静态方法必须是public修饰符,而抽象类随意
 * 4.接口中没有构造器,而抽象类中有
 * 5.接口中没有静态块和构造块,而抽象类中全有
 * 6.接口中的抽象方法默认被public abstract修饰,
 * 7.接口是被类用来实现的(普通类实现接口,必须添加所有的抽象方法实现),而抽象类是被用来继承的
 * 8.一个类可以同时实现多个接口,而抽象类只能单继承
 * 9.接口可以多继承接口,而抽象类只能单继承
 *总结:
 *
 *作用:
 *1.主要用来充当方法的目录,统一所有实现类中方法的规范
 *2.在以后的项目中,我们可能会使用很多常量值,如果常量值的定义到处都是的时候很麻烦,此时可以将所有的常量都保存在接口中
 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

day11

三:多态

就是指多个形态。
1:多态是指声明的是父类(包括接口)的类型,但是实例化的却是子类(实现类)的对象。
2:继承或实现+方法的重写是多态的前提条件。
多态的好处:
1:可替换性(Anmial a ;
a= new Pig(); //声明接口类型,实例化实现类的对象。
a= new Cow();
a= new Mouse()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/325118
推荐阅读
相关标签