java学习记录笔记
来源:互联网 发布:迅速出效果图软件 编辑:程序博客网 时间:2024/05/26 12:57
判断方法重载的依据:
1.必须是在同一个类中
2.方法名相同
3.方法参数的个数,顺序或类型不同
最重要的是④-_-||
4.与方法的修饰符或返回值没有关系
static 出现的必要性:
希望基于一个类创建的所有对象能共享同一个成员,
此时用到了static。
java中被static修饰的成员成为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。
**静态成员可以使用类名直接访问,也可以使用对象名进行访问。
更推荐使用类名访问~****重点内容**
静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!
使用static修饰的部分,可以通过两种方法调用:
1*.使用类名调用静态*
eg: Outer.a
2*.创建对象,然后通过对象名调用,更推荐类名调用*
Outer o = new Outer();
o.a;
注意:
1.静态方法中可以 直接调用同类中的静态成员,但不能直接调用非静态成员。
public class HelloWorld{ String name="imooc"; static String hobby ="imooc"; public static void print(){ System.out.println(name);//不能直接调用非静态变量,会报错 System.out.println(hobby); }}
如果希望在静态方法中调用非静态变量,可以通过创建类的对象来访问非静态变量。
HelloWorld hw = new HelloWorld();
System.out.println(hw.name);
2.在普通成员方法中,可以直接访问同类的非静态变量和静态变量。
String name = "imooc";static String hobby = "imooc";public void show(){ System.out.println(name); System.out.println(hobby);}
3.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。
public void show(){ System.out.println("welcom to imooc");}public static void print(){ System.out.println("welcome to imooc");}public static void main(String[] args){ //静态方法调用非静态方法,必须通过对象来调用 HelloWorld hello = new HelloWorld(); hello.show(); //但是可以随便调用静态方法 print();}
即:静态调用非静态必须通过对象来调用,静态调用静态,非静态调用非静态,非静态调用静态都可以直接调用!
Java中的static使用之静态初始化块
Java中可以通过初始化块进行数据赋值。
eg:
public class HelloWorld{
String name;//定义一个成员变量
{
name=”imooc”;
}
}
在类的声明中,可以包含多个初始化块,当创建类的实例时,就会一次执行这些代码块。如果使用static修饰初始化块,就称为静态初始化块。
**注意:
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。**
package com.edu.hpu.test;public class StaticTest1 { int num1; int num2; static int num3; public StaticTest1(){ num1 = 91; System.out.println("通过构造方法为变量num1赋值"); } {//初始化块 num2=74; System.out.println("通过初始化块为变量num2赋值"); } static {// 静态初始化块 num3= 89; System.out.println("通过静态初始化块为变量num3赋值"); } public static void main(String[] args) { // TODO Auto-generated method stub StaticTest1 st = new StaticTest1(); System.out.println("num1:"+st.num1); System.out.println("num2:"+st.num2); System.out.println("num3:"+st.num3); StaticTest1 st1 = new StaticTest1(); }}
代码运行结果如下:
通过静态初始化块为变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:91
num2:74
num3:89
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
可以看出在指定代码的时候是优先执行初始化块的,在执行初始化块的时候也是有先后顺序的,优先执行静态初始化块。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 st1 时并未执行静态初始化块。
Java中的封装:
封装实现的步骤:
(一)修改属性的可见性:
设为private
(二)创建getter/setter方法:
用于属性的读写
(三)在getter/setter方法中加入属性控制语句:
对属性值的合法性进行判断。
封装的类名称冲突从而引入了 包 的概念.
包的作用:
- 管理Java文件,解决名称冲突。
包的命名规范: - 包名间用‘.’隔开。 必须放在Java源程序的第一行。
- 通过import 关键字,在某个文件使用其他文件中的类。
- java中包的命名规范,全小写字母拼写。
this关键字:
1.this关键字代表当前的对象
this.属性 :操作当前对象的属性。
this.方法 :调用当前对象的方法。
2.封装对象的属性的时候,经常会使用this关键字。
Java中的内部类
1.内部类就是定义在另一个类里面的类。
与之对应,包含内部类的类被称为外部类。
注意:
内部类也是一个类,可以有自己的成员方法和成员变量。
2.内部类的主要作用是:
1)内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
2)内部类的方法可以直接访问外部类的所有数据,包括私有的数据。
3)内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。
**3.内部类的种类:
1)成员内部类
2)静态内部类
3)方法内部类
4)匿名内部类**
1. 成员内部类:
内部类中最常见的内部类,也称为普通内部类。
1.Inner类定义在Outer类的内部,相当于Outer类的一个成员变量的位置,Inner类可以使用任意访问控制符,如public ,protected,private等。
2.Inner类中定义的test()方法可以直接访问Outer类中的数据,而不受访问控制符的影响,如直接访问Outer类中的私有属性a;
3.定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,
即:内部类 对象名 = 外部类对象.new 内部类();
4.编译上面的程序后,会发现产生两个.class文件。
包括内部类的.class 文件,和内部类的.class文件,
但是成员内部类的.class文件是这样的格式的:
外部类名$内部类名.class
重点:
1.外部类是不能直接使用内部类的成员和方法的。可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
2.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用this关键字。
public class Outer{ int b=1; public class Inner{ int b=2; public void test(){ System.out.println("访问外部类的b:"+Outer.this.b); //访问外部类中的成员属性b System.out.println("访问内部类的b:"+b); } }}
2.Java中的静态内部类
静态内部类是static修饰的内部类,特点如下:
1.静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员 的方式访问
2.如果外部类的静态成员与内部类的成员名称相同,可通过”类名.静态成员”访问外部类的静态成员。如果外部类的静态成员与内部类的成员名称不相同,则可以通过”成员名”直接调用外部类的静态成员。
3.创建静态内部类的对象时,不需要外部类的对象,可以直接创建
内部类 对象名 = new 内部类();
//外部类public class Souter{ private int a = 99; static int b=1; //静态内部类 public static class SInner{ int b=2; public void test(){ System.out.println("访问外部类中的b:"+SOuter.b); System.out.println("访问内部类中的b:"+b); } } public static void main(String[] args){ //直接创建内部类的对象。 SInner si = new SInner(); //调用test()方法 si.test(); }}
成员内部类与静态内部类的异同:
相当于静态变量与非静态变量的异同有类似之处。
静态内部类可以直接访问外部类的静态变量,但是不能直接访问外部类的非静态变量。
雷同于:
即:静态调用非静态必须通过对象来调用,静态调用静态,非静态调用非静态,非静态调用静态都可以直接调用!
但是两者在内部类的变量名与外部类的变量名一致时,在调用外部类的变量时,需要添加外部类名+变量名。成员内部类还需要+this关键字。
3.Java中的方法内部类:
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
//外部类public class Mouter{ public void show(){ final int a=25;//常量 int b=13; //方法内部类 class MInner{ int c=2; public void print(){ System.out.println("访问外部类的方法中的常量a:"+a); System.out.println("访问内部类的变量c:"+c); } } MInner mi = new MInner(); mi.print(); } public static void main(String[] args){ Mouter mo = new MOuter(); mo.show(); }}
注意:
由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符。
零碎知识点:
可以通过(int)(Math.random()*100)生成100以内的随机数
java里面给成员变量默认赋初始值。
局部变量不会给赋予初始值。
如何声明数组
语法:
数据类型[] 数组名; //int[] scores;
数据类型 数组名[]; //int scores[];
数组名 = new 数据类型[数组长度]; //scores = new int[29];
可以合并,即声明数组的同时为它分配空间。
int[] scores =new int[5];
Java中还提供了另外一种直接创建数组的方式,它将声明数组,分配空间和赋值合并完成。
int[] scores = {23,435,546,4351};
它等价于 :
int[] scores = new int[]{23,435,546,4351}; //后面的[ ]内必须为空,不能指定长度。
- java学习记录笔记
- 记录学习java的笔记
- java学习笔记-excel表格形式记录
- java学习笔记-excel表格形式记录
- java学习笔记(1)-基础知识记录
- java学习笔记之 资源记录
- **JAVA 学习记录之 XML解析操作学习笔记**
- java4android学习记录笔记
- linux 学习记录笔记
- android学习笔记记录
- 学习笔记记录
- 学习笔记快速记录
- Linux学习笔记记录
- DexHunter学习笔记记录
- jquery 学习笔记记录
- Python学习笔记记录
- Android --学习笔记记录
- mybatis 学习笔记 记录
- 夜· 启程
- 常见的Web负载均衡方法
- 《AndroidStudio每日一贴》2.快速查看项目中最近的变更
- light oj 1094 Farthest Nodes in a Tree(树的直径模板)
- Java相关知识(一)
- java学习记录笔记
- 字符类型,变量,运算符,以及简单的输入输出.交换两个变量
- 长按圆形按钮结束事件,有颜色变化的效果,有源码
- PHP与JAVA通信
- C语言-数组.
- 归并排序(MergeSort)的原理及延伸性思考
- 小比赛(CodeForces 560A,UVA 11040,CodeForces 550B,HDU 1856,UVA 1644,CodeForces 560B,HDU 3405,UVA 10820)
- JS获取jsp里属性的值
- 如何获取视频路径