java基础10

来源:互联网 发布:淘宝客返利程序 编辑:程序博客网 时间:2024/06/05 01:13
1:内部类
(1)把类定义在一个类的内部。
(2)特点:
A:内部类可以直接使用外部类的成员,包括私有。
B:外部类要使用内部类成员,必须创建对象使用。
(3)内部类的分类:
局部内部类:定义在方法中的内部类
成员内部类:定义在类中方法外的内部类
(4)成员内部类
class Outer {
class Inner {

}
}


普通的修饰的时候:
外部类名.内部类名 变量 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();


class Outer {
static class Inner {

}
}
用静态修饰后:
外部类名.内部类名 变量 = 外部类名.内部类对象
Outer.Inner oi = new Outer.Inner();


成员内部类:
private:为了数据的安全。
static:为了方便调用。
(5)局部内部类
A:带名字的局部内部类
class Outer {
public void method() {
class Inner {
public void show() {
System.out.println("show");
}


Inner i = new Inner();
i.show();
}
}

}

局部内部类:

可以访问外部类中的成员

可以访问局部成员,但它必须被final修饰

为什么?

因为局部变量使用完毕就消失了。而内部类还在内存中存在,这个时候还要使用局部变量所以为了延长它的生命周期用final修饰


B:匿名内部类(掌握)
a:没有名字的内部类。其本质是一个对象。
b:前提:存在一个抽象类或者接口。
c:格式:
new 抽象类或者接口() {
重写父类方法;
};


本质:是一个继承了类或者实现了接口的子类匿名对象。

这个里面的方法怎么用?

因为它本身就是一个对象,可以用点(.) 调用即可

如果他有多个方法,可以用父类接收,形成多态



(6)面试题:
interface Inter{void show();}class Outer{//补齐代码,完成主方法中定义的功能public static Inter method() {/*Inter i = new Inter(){public void show() {System.out.println("HelloWorld");}};return i;*/return new Inter(){public void show() {System.out.println("HelloWorld");}};}}class InnerClassTest{public static void main(String[] args){Outer.method().show(); /*分析:A: Outer.method()我们要知道在Outer中有一个静态方法method。B:Outer.method().show() 这个返回值居然还可以继续调用show方法。 那么,说明这个返回值应该是一个包含有show方法的对象。*/}}




2:包
(1)包就是永远区分相同类在不同文件夹下。其本质就是一个文件夹。
(2)包的作用:让相同类名的类可以存在。
(3)定义包:
package 包名.包名...;
(4)带包的编译和运行(理解)
A:方式一
手动式
a:javac编译代码
b:手动建立包,把class扔进去
c:java执行,带全路径
B:方式二
自动式
a:通过javac编译自动生成包
javac -d . 文件名
b:通过java运行class文件
java 包名.包名.class文件名不带扩展名
(5)不同包下的类之间的访问。
权限够大才行。


以后,我们所有定义的类都用public修饰。
(6)面试题:
在同一个java文件中,可不可以有多个类?可以。
而我们知道类是可以用public修饰的,那么,可不可以多个类都用public修饰?不可以。
并且,一般的时候,如果有main方法也存在的时候,都是public修饰带main那个类。
文件名必须和该public修饰的类名一致。


3:导包
(1)如果多次使用一个多级包的类,每次带全路径太麻烦,我们就考虑使用导包。
(2)导包的格式:
import 包名.包名...;


注意:
在同一个包下如果有多个类被使用,可以使用通配符*来导入,但是不建议。
推荐:使用谁导入谁。
(3)面试题:
package,import,class出现的位置?
package > improt > class


4:权限修饰符
(1)用于保证在不同的情况下可以使用
(2)使用如下

本类同一个包下不同包下的子类不同包下的无关类privateY默认YYprotectedYYYpublicYYYY



5:权限修饰符的组合使用及常见使用

类成员变量构造方法成员方法privateYYY默认YYYYprotectedYYYpublicYYYYabstractYYfinalYYYstaticYY



常见的组合规则:
权限修饰符+abstract/final/static+...


我们到底怎么用:
类:
public class Demo {

}


成员变量:
变量:private String name;
常量:public static final int X = 10;


构造方法:
不让外界创建:private Demo(){}
大部分:public Demo(){}


成员方法:
不让外界用:private void show(){}
大部分:public void method()

抽象方法:public abstract void function();

/*求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字,n表示a的位数,两个数据都是从键盘录入,例如:当键盘录入的 a=2,n=5时:sn = 2 + 22 + 222 + 2222 + 22222 分析:A:从键盘录入数据。录入a和n。a表示数字的值n表示对于的a最大有几位。B:求和变量。C:分析数据组成规律 定义一个初始化值叫做a,定义每一个数据叫做an。第n项。 第一个数据:a1 = 2 =a; 第二个数据:a2 = 22 =a1*10+a; 第三个数据:a3 = 222 = a2*10+a; 第四个数据:a4 = 2222 = a3*10 + a; 第五个数据:a5 = 22222 = a4*10 + a*/import java.util.Scanner;class NumberTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入a的值:");int a = sc.nextInt(); //2System.out.println("请输入n的值:");int n = sc.nextInt(); //5//定义求和变量int sum = 0;//定义通项的值int an = 0;for(int x=0; x<n; x++) {an += a; //an=2,an=22,an=222,an=2222,an=22222sum += an; //sum=2,sum=24,sum=246,sum=2468,sum=24690an*=10; //an=20,an=220,an=2220,an=22220,an=222220}System.out.println(sum);//System.out.println(2 + 22 + 222 + 2222 + 22222 );}}



0 0
原创粉丝点击