认识类和对象
认识类
类名注意采用大驼峰定义成员前写法统一为 public.此处写的方法不带 static 关键字.
public class Dog { //定义类//类的成员属性public String name;//名字public int age;//年龄public String color;//颜色//类的成员方法//吃饭public void eat(){System.out.println("摇尾巴");}//叫声public void bark(){System.out.println("汪汪汪");}
} 1. 一般一个文件当中只定义 一个类2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)3. public修饰的类必须要和文件名相同
类的实例化
objectName 是为新创建的对象指定的变量名 new 关键字用于创建一个对象的实例.使用 “ . ”来访问对象中的属性和方法.对象名.类的成员名同一个类可以创建多个实例
类和对象的说明
public static void main(String[] args){//类的实例化2Dog dog=new Dog();dog.name="大黄";dog.age=3;dog.color="yellow";dog.eat();//类的实例化3Dog dog2=new Dog();dog2.name="黑虎";dog2.age=5;dog2.color="black";dog2.bark();} this引用
1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型2. this只能在"成员方法"中使用3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。
对象的构造及初始化
构造方法
完成一个对象的构造,分两步:1.分配内存2.调用合适的构造方法
名字必须与类名相同没有返回值类型,设置为void也不行一般情况下使用public修饰在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用 一次构造方法之间可以构成方法重载(用户根据自己的需求提供不同参数的构造方法)
public class Dog { //定义类//类的成员属性public String name;//名字public int age;//年龄public String color;//颜色//无参构造方法public Dog(){// 1// 无参构造方法--内部给各个成员赋值初始值,该部分功能与三个参数的构造方法重复// 此处可以在无参构造方法中通过this调用带有三个参数的构造方法// 但是this("小灰",6,"yellow");必须是构造方法中第一条语句this("小灰",6,"yellow");// //2// this.name="小灰";// this.age=6;// this.color="yellow";}//带三个参数的构造方法public Dog(String name,int age,String color){this.name=name;this.age=age;this.color=color;}//打印public void Print(){System.out.println("name:"+this.name+" age:"+this.age+" color:"+this.color);}public static void main(String[] args){//此次创建一个Dog类型的对象,并没有显示调用构造方法Dog dog5=new Dog();//Dog()构造方法被调用dog5.Print();Dog dog6=new Dog("小白",9,"black");//Dog(String,int,String)构造方法被调用dog6.Print();}
} 
this();调用当前类的其他构造方法,只能在当前的构造方法内部第一行使用
this.field 访问当前对象的属性
this.method() 调用当前对象的方法
//errpublic Dog() {this("小灰",6,"yellow");}public Dog(String name,int age,String color){this();}//无参构造器调用三个参数的构造器,而三个参数构造器有调用无参的构造器,形成构造器的递归调用//编译报错:java: 递归构造器调用 默认初始化
public static void main(String[] args){int a;System.out.println(a);
}//error java: 可能尚未初始化变量a 但我们发现成员变量未初始化仍然可以编译成功,这是为什么?
public static void main(String[] args){Dog dog4=new Dog();System.out.println("name:"+dog4.name+" age:"+dog4.age+" color:"+dog4.color);
} 
当成员变量未初始化时:
引用类型一般默认为null
基本类型一般为自己的0值
一个类中无构造方法,java会自动提供一个不带参数的构造方法
只要有一个构造方法,java不提供任何构造方法
我们发现当我们删去无参构造方法时,因为有带三个参数构造方法的存在,编译器不提供任何构造方法,因此在main方法中调用Dog()时出现错误

Classname objectname = new ClassName() ; | 数据类型 | 默认值 |
|---|---|
| byte | 0 |
| char | '\u0000' |
| short | 0 |
| int | 0 |
| long | 0L |
| boolean | false |
| float | 0.0f |
| double | 0.0 |
| reference | null |
就地初始化
封装
private
public class Dog {private String name;//名字private int age;//年龄public String color;//颜色//获取name成员public String getName() {return name;}//修改name成员public void setName(String name) {this.name = name;}//获取age成员public int getAge() {return age;}//修改age成员public void setAge(int age) {this.age = age;}
}class test{public static void main(String[] args) {Dog dog=new Dog();dog.setName("大黄");//调用setName方法,修改name成员System.out.println(dog.getName());//调用getName方法,获取name成员dog.setAge(8);//调用setAge方法,修改age成员System.out.println(dog.getAge());//调用setAge方法,获取age成员}
} 访问限定符
Java中主要通过类和访问权限来实现封装:1. 类可以将数据以及封装数据的方法结合在一起2. 访问权限用来控制方法或者字段能否直接在类外使用
| 范围/访问限定符 | private | default | protected | public |
| 同一包中的同一类 | 是 | 是 | 是 | 是 |
| 同一包中的不同类 | 是 | 是 | 是 | |
| 不同包中的子类 | 是 | 是 | ||
| 不同包中的非子类 | 是 |
protected主要是用在继承中default权限指:什么都不写时的默认权限访问权限除了可以限定类中成员的可见性,也可以控制类的可见性
封装扩展之包
包的概念
常见包
导入包中的类
2. 使用 import语句导入包.

3. 如果需要使用 java.util 中的其他类, 可以使用 import java.util.*

import static java.lang.Math.*;//导入java.lang.Math中的所有类
public class Test {public static void main(String[] args) {double x=3;double y=4;double a=Math.sqrt(Math.pow(x,2)+Math.pow(y,2)); //a=5double b=sqrt(pow(x,2)+pow(y,2));//静态导入 //b=5System.out.println(a);System.out.println(b);
} 自定义包
1. 在文件的最上方加上一个 package 语句指定该代码在哪个包中.2. 包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 ).3. 包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码.4. 如果一个类没有 package 语句, 则该类被放到一个默认包中.
包的访问权限控制举例
package com.bit.demo1;public class Dog {private String name;//名字private int age;//年龄public String color;//颜色String sex;//default属性public Dog(String name,int age,String color,String sex){this.name=name;this.age=age;this.color=color;this.sex=sex;}//吃饭private void eat(){System.out.println("摇尾巴");}//叫声public void bark(){System.out.println("汪汪汪");}//睡觉void sep(){System.out.println("睡觉");}public static void main(String[] args) {Dog dog=new Dog("大黄",3,"yellow","男");System.out.println(dog.name);System.out.println(dog.age);System.out.println(dog.color);System.out.println(dog.sex);dog.eat();dog.bark();dog.sep();}
} package com.bit.demo1;public class TestDog {public static void main(String[] args) {Dog dog=new Dog("大黄",3,"yellow","男");System.out.println(dog.color);// System.out.println(dog.name);//err name是私有的,不允许被其他类访问System.out.println(dog.sex);// sex是default,允许被同一包中的不同类访问dog.bark();// dog.eat();//errdog.sep();}
} package com.bit.demo2;
import com.bit.demo1.Dog;
public class TestDog {public static void main(String[] args) {Dog dog=new Dog("大黄",3,"yellow","男");System.out.println(dog.color);// System.out.println(dog.name);//err name是私有的,不允许被其他类访问// System.out.println(dog.sex);//err sex是default,不允许被其他包中的类访问dog.bark();// dog.eat();//err// dog.sep();//err}
}

static 成员
public class Dog {//非静态成员变量public String name;//名字public int age;//年龄public String color;//颜色//静态成员变量(类成员)private static String species;public Dog(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}public void print(){System.out.println("name:"+this.name+" age:"+this.age+" color:"+this.color+" species:"+Dog.species);}public static void main(String[] args) {Dog.species="中华田园犬";Dog dog1 = new Dog("大黄",1,"yellow");dog1.print();Dog dog2 = new Dog("小灰",2,"black");dog2.print();Dog dog3= new Dog("小白",3,"brown");dog3.print();}
} 
public class Dog {//非静态成员变量public String name;//名字public int age;//年龄public String color;//颜色//静态成员变量(类成员)private static String species;//非静态成员方法public void eat(){System.out.println("摇尾巴");}//静态成员方法(类成员)public static void sleep(){System.out.println("睡觉");//age=10;//err 无法从静态上下文中引用非静态 变量 age//eat();//err 无法从静态上下文中引用非静态方法 eat()Dog dog=new Dog();System.out.println(dog.name="小花");dog.eat();}public static void main(String[] args) {//通过对象访问Dog dog0=new Dog();System.out.println(dog0.species="中华田园犬");dog0.sleep();//通过类名访问System.out.println(Dog.species="猎犬");Dog.sleep();}
} 
代码块
代码块概念以及分类
{} 包围的一段代码,它定义了一组可以一起执行的语句。这种代码块可以出现在方法体内部,也可以作为 if、 else、 for、 while、 do-while 等控制流语句的一部分。 静态代码块不管生成多少个对象,其 只会执行一次静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)静态代码块只要类被加载,就会被执行
public class Dog {//非静态成员变量public String name;//名字public int age;//年龄public String color;//颜色//静态成员变量(类成员)private static String species;//构造代码块(实例代码块){this.name="小黑";this.age=2;this.color="yellow";System.out.println("这是实例代码块");}//静态代码块static {species="牧羊犬";System.out.println("这是静态代码块");}static {species="运动犬";System.out.println("这是静态代码块2");}//构造方法public Dog() {this.name = name;this.age = age;this.color = color;System.out.println("这是构造方法");}public void print(){System.out.println("name:"+this.name+" age:"+this.age+" color:"+this.color+" species:"+Dog.species);}public static void main(String[] args) {Dog dog1 = new Dog();dog1.print();Dog dog2 = new Dog();dog2.print();
} 
根据编译结果我们可以得到
运行时执行顺序为:静态代码块 实例代码块 构造方法
静态代码块只执行一次
public static void main(String[] args) {System.out.println(Dog.species);
} 
当我们只加载类时,静态代码块就会被执行,而实例代码块只有在创建对象时才会执行
相关文章:
认识类和对象
认识类 类是用来对一个实体 ( 对象 ) 来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥) 类中包含的内容称为 类的成员。属性主要是用来描述类的,称之为 类的成员属性或者 类成员变量。方法主要说明类具有哪些功…...
解决echarts桑基图为0时tooltip不显示的问题
关键代码 formatter: function (params) {console.log("params",params)if (params.value 0) {// 如果值为0,返回空字符串,不显示任何内容return params.name : params.value;// return ;} else {// 否则返回标准的格式化信息return par…...
vue3 基础笔记
基础模板语法 //1. 普通文本插值: <p>{{ rawHtml }}</p>//2. v-html 指令:插入 HTML 内容,并希望 Vue 将其视为 HTML 而不是纯文本 <p v-html"rawHtml"></p> let rawHtml <span>这是一个 <b>HTML</…...
Oracle 第30章:最佳实践与案例研究
在《Oracle最佳实践与案例研究》第30章中,我们探讨了实际项目中的经验分享以及解决常见问题的技巧。这一章节旨在通过具体的案例来说明如何在Oracle数据库管理和开发中应用最佳实践。下面我将从几个方面进行详细介绍,并提供一些源代码示例。 1. 性能优化…...
第九周预习报告
文章目录 第九周预习报告学习内容AI 对学习内容的总结章节概述内容总结 对知识总结的反思思维导图基于AI的学习知识点1:系统调用知识点2:进程控制 学习实践过程遇到的问题与解决方式问题1:fork() 调用后,子进程和父进程同时运行导…...
【分享】这篇教程助力你成为 JavaScript 糕手!(四)
第四章:运算符与表达式 4.1 算术运算符 加法运算符():用于数字相加,如console.log(5 3);结果为8。 当用于字符串时,它表示字符串拼接。例如console.log(‘Hello’ ‘world’);输出Hello world。如果一个操…...
双亲委派模型的破坏
双亲委派模型的第一次“被破坏”其实发生在双亲委派模型出现之前--即JDK1.2发布之前。由于双亲委派模型是在JDK1.2之后才被引入的,而类加载器和抽象类java.lang.ClassLoader则是JDK1.0时候就已经存在,面对已经存在 的用户自定义类加载器的实现代码,Java设计者引入双亲委派模…...
Android关机流程知多少?
在 Android 中,关机流程涉及系统各个组件的协同工作,确保设备在断电之前能够安全地关闭所有活动并保存数据。以下是 Android 系统中关机流程的详细介绍: 1. 用户触发关机请求 关机流程由用户的操作触发,通常有以下几种方式&#…...
深入理解指针end(总结篇)
如果有不会的智识点,请移动到博主前四篇指针博客! 可以当一个指针智商检阅博客看。 看看你是否掌握了这些知识 1:内存,指针变量 内存单元的编号地址指针; 指针变量和其他变量没有区别,指针变量是来存放…...
C# 程序暂停的两种方式
C# 程序暂停的两种方式:EventWaitHandle 与 volatile bool pause 在C#中,线程控制是多线程编程的重要组成部分,其中实现暂停的需求经常出现。本文将详细探讨使用EventWaitHandle和设置volatilebool来实现线程暂停的不同方式,它们…...
【LeetCode】【算法】160.相交链表
Leetcode 160. 相交链表 题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 思路 AB,一个指针,访问完A访问B;另一个指针&#…...
光伏破局 引领能源革命
为进一步推进商业信用体系建设,促进企业诚实守信经营,面向企业普及诚信与品牌建设的意义,指导企业加强诚信品牌建设,提升其整体竞争力,“崛起的民族品牌”专题系列节目以诚信为内涵,在全国范围内遴选出有行…...
Jenkins声明式Pipeline流水线语法示例
系列文章目录 docker搭建Jenkins2.346.3版本及常用工具集成配置(ldap、maven、ansible、npm等) docker安装低版本的jenkins-2.346.3,在线安装对应版本插件失败的解决方法 文章目录 系列文章目录jenkins流水线基础1、pipeline1.1、什么是pipeline?1.2、为什么使用pi…...
互联网技术净土?原生鸿蒙开启全新技术征程
鸿蒙生态与开发者的崭新机会 HarmonyOS NEXT承载着华为对未来操作系统的深刻理解,如今已发展为坚实的数字底座。它不仅在技术层面取得了全面突破,还在中国操作系统市场中站稳了脚跟。 当前,HarmonyOS NEXT的代码行数已超过1.1亿,…...
关于Django 模型字段 `choices`自定义数据类型的枚举——补充
文章目录 1. 处理 datetime 类型的 choices2. 处理 time 类型的 choices3. 处理 Decimal 类型的 choices4. 处理 UUID 类型的 choices5. 处理 float 类型的 choices 在 Choices 类的基础上扩展,可以将 choices 与特定数据类型(如 date 或 datetime&a…...
CAP理论的延申--BASE理论
上一篇文章我简单介绍了一下什么是CAP理论,本篇文章讲解一下随着技术的演变,CAP理论是如何发展为BASE理论的。 CAP理论回顾 首先我们回顾一下CAP理论,CAP理论指得是分布式系统发生网络等故障时,不同节点之间无法同步数据…...
【傻呱呱】phpMyAdmin怎样给特定用户授权特定数据库权限?
前期准备 phpMyAdmin数据库(MySQL) END...
『VUE』21. 组件注册(详细图文注释)
目录 组件注册局部注册全局注册全局注册示例总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 组件注册 组件注册有两种方式:全局注册和局部注册。全局注册只需要注册依次,其他组件可以直接调用无需再次像局部注册一…...
如何产看SQL 查询的执行时间
要查看 SQL 查询的执行时间,尤其是毫秒级别,可以使用以下几种方法: 方法 1:使用 SET STATISTICS TIME 查看执行时间 SET STATISTICS TIME 会显示执行时间的详细信息,包括 CPU 时间和总耗时。启用后,SQL S…...
计算机网络——路由器构成
算路由表是分布式去算——你算你的,我算我的 输出队列非先来先传 调度发生在哪里 缓存队列一般是应对——来数据方向的速度过快问题...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
