零基础学习java------day10------带包编译,权限修饰符,内部类,调式,junitTest
0. 带包编译
解决使用notepad++编写的java类中如果有package的解决方案,如下代码
package com._51doit.test;
class HelloWorld{
public static void main(String[] args){
System.out.println("hello world");
}
}
第一种(手动式)
先使用javac 命令运行,得到编译后的.class文件
在当前.java所在的文件夹下。手动创建(文件夹),然后把.class 文件拷贝到文件夹中
运行命令: java 包名.类名
第二种(能自动生成包名)
编译命令:java -d 空格.空格 文件名.java(编译完会产生包名)
运行命令:java 包名.类名

导包:import 全类名(包名加类名)
顺序:package import class
1. 权限修饰符

(1)public可以在不同包其他类使用(即跨包使用),例
下图为包的结构图

由图可知,AuthDemo.java所在的包为auth,而AuthTest所在的包为day10,两个类也无继承关系
AuthDemo代码如下
package com._51doit.javase.day10.auth;
public class AuthDemo {
String name = “张三”;
public static void print() {
System.out.println("public跨包可以使用");
}
}
AuthTest代码如下
package com._51doit.javase.day10.auth;
import com._51doit.javase.day10.auth.AuthDemo;
public class AuthDemo {
public static void main(String[] args) {
AuthDemo.print();
}
}
运行结果:public跨包可以使用
但若去掉AuthDemo类的public修饰符,则会出现报错,如下图

(2)protectes:修饰方法和变量
可以在不同包的子类中访问,可以使用super关键字,创建子类的对象访问(创建父类的对象无法访问)
当将AuthDemo类中成员变量的修饰符改为protected,在AuthTest中调用发现调用不了,这个时候就要将AuthTest类继承AuthDemo类(即不同包子类),创建子类对象即可调用name属性,代码如下
package com._51doit.javase.day10;
import com._51doit.javase.day10.auth.AuthDemo;
class AuthTest extends AuthDemo{
public static void main(String[] args) {
AuthDemo.print();
// AuthDemo a = new AuthDemo();
// a.name;
AuthTest a = new AuthTest();
System.out.print(a.name);
}
}
注意 1. 在此创建父类对象不可调用name属性,必须是子类对象
2. 不能单独使用 a.name(报错Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration,因为a.name此处相当于常量,应该定义一个数据类型去接收它,如String name = a.name)
(3)修饰外部类的修饰符:
public (default) final abstract
2. 内部类
定义:定义在类内部的类,内部类可以直接访问外部类的成员,包括私有。外部类要访问内部类的成员,必须创建对象
2.1 成员内部类
1. 无限制的访问外部类中的成员,包括静态成员和私有成员
2. 成员内部类不能定义静态成员(原因,静态成员先于成员出现,所以成员内部类不可能有静态成员)
3. 如何创建内部类的对象:
外部类名.内部类名 对象名=new 外部类名().new 内部类名();
4. 如何在内部类中访问外部类中同名的成员
外部类名.this.成员
案例:
1 public class MemberInnerClass {
2 public static void main(String[] args) {
3 OuterClass.InnerClass inner = new OuterClass().new InnerClass();
4 inner.show();
5 System.out.println(inner.a);
6 }
7 }
8 class OuterClass{
9 private String name = "张三";
10 static int age = 10;
11 String a = "xyz";
12 class InnerClass{
13 String a = "acx";
14 public void show() {
15 String a = "def";
16 System.out.println(a);
17 System.out.println(this.a);
18 System.out.println(OuterClass.this.a);
19 System.out.println(name);
20 System.out.println(age);
21 }
22 }
23 }
2.2 局部内部类
局部内部类:定义在方法中或者是代码块中的类
1. 局部内部类只能在方法中被认识
2. 局部内部类不能使用public private protected 修饰符修饰(内部成员作用域在定义时就有范围,是所在的大括号内)
3. 在jdk1.7之前,局部内部类中访问的变量必须用final修饰,1.7之后可以不加
public class InnerClassDemo2 {
public static void main(String[] args) {
new OuterClass2().method();
}
}
class OuterClass2{
public void method(){
int a = 10;// 此处a不能用权限修饰符修饰
class InnerClass2{
public void show() {
System.out.println(a);
}
}
new InnerClass2().show();//局部内部类只能在方法中被认识,所以只能在方法中创建对象
}
}
2.3 静态内部类(参考博客https://www.cnblogs.com/a8457013/p/8078826.html)

静态内部类:用static修饰的内部类
1. 静态内部类中既可以定义静态成员,也可以定义非静态的成员
2. 有静态成员(变量和方法)的内部类,一定是静态内部类
3. 如何调用静态内部类红的成员
静态成员: 外部类名.内部类名.静态成员
非静态成员: new 外部类名.内部类名().非静态成员
public class InnerClassDemo3 {
public static void main(String[] args) {
System.out.println(OuterClass3.InnerClass3.a); //调用静态常量
System.out.println(new OuterClass3.InnerClass3().b);//调用非静态常量
}
}
class OuterClass3{
static class InnerClass3{
static int a = 10;
int b = 100;
}
}
2.4 匿名内部类(非常重要)
匿名对象:new 类名()
匿名内部类:
本质: 实现接口或者继承了(抽象)类的子类(其本质就是一个对象)
格式
new 接口/类(){
重写或实现的方法
}
要求:见到接口或者接口类就能写出匿名内部类
案例1
正常情况下,我们实现接口方法是定义一个类去继承子类然后再雷利实现这个接口,但这样很麻烦,又要创建子类又要创建对象,如下
1 public class NoNameClassDemo {
2 String name = "abc";
3 public static void main(String[] args) {
4 InterfaceClass i = new InterfaceClass(); //创建子类对象
5 i.test();
6 }
7 }
8 // 定义一个接口
9 interface interfaceA{
10 public void test();
11 }
12 // 定义接口的子类实现接口
13 class InterfaceClass implements interfaceA{
14 public void test() {
15 System.out.println("五环,你比四环多一环");
16 }
17 }
匿名类可以很好的解决这个问题,代码如下
public class NoNameClassDemo {
String name = "abc";
public static void main(String[] args) {// 定义匿名函数此处也可以将匿名函数赋值给变量,如a,就可以用a.test()调用方法
new interfaceA() {
public void test() {
System.out.println("六环,你比五环多一环");
}
}.test();
}
}
// 定义一个接口
interface interfaceA{
public void test();
}
同理,类也是一样
案例2
接口当数据类型传参(实质是父类的引用指向子类),接口不能创建对象,所以只能传其子类对象
public class NoNameInnerClass {
public static void main(String[] args) {
show(new FF()); // 此处传参是传接口的子类对象,接口不能创建对象
}
public static void show(CC c) {
c.test();
}
}
interface CC{
void test();
}
class FF implements CC{
public void test() {
System.out.println("哈哈,傻了吧");
}
此处也可以用匿名类来写,如下
public class NoNameInnerClass {
public static void main(String[] args) {
CC c = new CC() {
public void test() {
System.out.println("哈哈,傻了吧");
}
};
show(c); // 此处传参是传接口的子类对象,接口不能创建对象
}
public static void show(CC c) {
c.test();
}
}
interface CC{
void test();
}
练习

3.junitTest
单元测试:
我们现在要执行一个方法,只能从main方法中开始,有一定的弊端;必须创建对象才能调用非静态方法
使用junittest可以不通过main方法让我们的程序直接执行
使用方式:
引入工具类
1.手动添加jar包(class文件的压缩包)
项目上右键--->build Path--->config build path

add extern jar- 找到需要用的jar 包, apply
使用:
在要执行的方法(非静态的)上,添加一个注解@Test
执行:
右键->run as - >junit test
使用elipse 中集成好的junit:
在包上右键-> new -> others




4. debug(断点调试)
用于追踪代码,能够直观的看到代码执行到每一步的结果
1. 加断点(一般从加载方法体中开始追踪),就是行号的左边,双击即可

2. 以debug的模式启动程序
右键->debug as->java application

控制代码的执行:
下一步: f6
进入方法: f5
跳出方法: f7:
进入下一个断点: f8
零基础学习java------day10------带包编译,权限修饰符,内部类,调式,junitTest的更多相关文章
- Java系列学习(十)-包与权限修饰符
1.形式参数和返回值的问题 (1)形式参数: A:类名:需要该类的对象 B:抽象类名:需要改类的子类对象 C:接口名:需要该接口的实现对象 (2)返回值类型: A:类名:抽象类名:返回的是该类的对象 ...
- 总结了零基础学习Java编程语言的几个基础知识要点
很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面 初学者先弄清这 ...
- 音乐出身的妹纸,零基础学习JAVA靠谱么
问:表示音乐出身的妹纸一枚 某一天突然觉得身边认识的是一群程序员 突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...
- Java语言中的访问权限修饰符
一个Java应用有很多类,但是有些类,并不希望被其他类使用.每个类中都有数据成员和方法成员,但是并不是每个数据和方法,都允许在其他类中调用.如何能做到访问控制呢?就需要使用访问权限修饰符. Java语 ...
- 在Editplus中配置java的(带包)编译(javac)和运行(java)的方法
配置的前提是电脑安装了JDK并且配置好了相关的环境变量(JAVA_HOME,path和classpath). 配置好后在命令行中输入javac和java验证是否配置成功: 如果出现上面的情况则说明配置 ...
- 在Editplus中配置java的(带包)编译(javac)和执行(java)的方法
配置的前提是电脑安装了JDK而且配置好了相关的环境变量(JAVA_HOME,path和classpath). 配置好后在命令行中输入javac和java验证是否配置成功: 假设出现上面的情况则说明配置 ...
- 匿名类、包、权限修饰符_DAY10
1:内部类(理解) (1)把类定义在一个类的内部. (2)特点: A:内部类可以直接使用外部类的成员,包括私有. B:外部类要使用内部类成员,必须创建对象使用. 例子: public c ...
- Java中的四种权限修饰符及六种非访问修饰符(简识)
一.是哪四种访问权限修饰符呢? public > protected > [default] > private (公共的 ) (受保护的) (默认的) (私有的) 二.简单认识四种 ...
- 章节五、2-Package包和权限修饰符
一.Package包 为了更好的组织类,java提供了包机制,用于区别类名的命名空间. 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了 ...
- java面向对象之关键字,权限修饰符
1.关键字:this,static,package,importthis:1.表示对当前对象的引用!2.表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特 ...
随机推荐
- cf17B Hierarchy(额,,,水)
题意: Nick's company employed n people. Now Nick needs to build a tree hierarchy of «supervisor-surbod ...
- Centos7 升级过内核 boot分区无法挂载修
参考连接:https://www.cnblogs.com/heqiuyong/p/11186301.html 故障图 挂载系统盘,光盘启动,急救模式, chroot /mnt/sysimage 报错 ...
- [WPF] 玩玩彩虹文字及动画
1. 前言 兴致来了玩玩 WPF 的彩虹文字.不是用 LinearGradientBrush 制作渐变色那种,是指每个文字独立颜色那种彩虹文字.虽然没什么实用价值,但希望这篇文章里用 ItemsCon ...
- JAVA学习(六)
今天先是把内存知识总结归纳地又学习了一遍,现在可以很清楚地描述JVM的内存是如何操作的了. 静态变量储存在方法区内存中,这个之前没有注意到,温故知新了. 如果一个引用是空的(就是指向null),那它在 ...
- Android Activity Deeplink启动来源获取源码分析
一.前言 目前有很多的业务模块提供了Deeplink服务,Deeplink简单来说就是对外部应用提供入口. 针对不同的跳入类型,app可能会选择提供不一致的服务,这个时候就需要对外部跳入的应用进行区分 ...
- CrawlSpider_获取图片名称地址,及入库
1.继承自scrapy.Spider 2.独门秘笈 CrawlSpider可以定义规则,再解析html内容的时候,可以根据链接规则提取出指定的链接,然后再向这些链接发送请求 所以,如果有需要跟进链接的 ...
- Java安全之基于Tomcat的通用回显链
Java安全之基于Tomcat的通用回显链 写在前面 首先看这篇文还是建议简单了解下Tomcat中的一些概念,不然看起来会比较吃力.其次是回顾下反射中有关Field类的一些操作. * Field[] ...
- 网络安全协议之IPsec
声明 本文仅发表在博客园,作者LightningStar. 简介[1] IPSec(Internet 协议安全)是一个工业标准网络安全协议,工作在OSI模型的第三层,即网络层,为IP网络通信提供透明的 ...
- WinForm训练一_改变窗体大小
1 //引用系统命名空间 2 using System; 3 //项目命名空间 4 using System.Collections.Generic; 5 using System.Component ...
- [cf1209E]Rotate Columns
题意也可以理解为这样一个过程: 对于每一列,将其旋转后选出若干行上的数,要求与之前的行都不同 用$g_{i,S}$表示第$i$列选出的行数集合为$S$的最大和,$f_{i,S}$表示前$i$列$S$中 ...