• Cert++
  • Practice
  • Certle
  • Review
  • Tracks
  • Checklist
  • Guides
  • Upgrade
Cert++
  1. Home
  2. Platform Developer II

Platform Developer II

Checklist progress

0/197Learned

Platform Developer II

Study Checklist

  • Platform Administrator
  • Platform App Builder
  • Platform Foundations
  • Platform Developer
  • Platform Administrator II
  • Agentforce Sales Consultant
  • Agentforce Service Consultant
  • Platform Data Architect
  • Platform Development Lifecycle and Deployment Architect
  • Platform Identity and Access Management Architect
  • Platform Integration Architect
  • Platform Sharing and Visibility Architect
  • Heroku Architect
  • B2C Solution Architect
  • Experience Cloud Consultant
  • Agentforce Field Service and Operations Consultant
  • Agentforce Nonprofit Consultant
  • Data 360 Consultant
  • Omnistudio Consultant
  • CRM Analytics and Einstein Discovery Consultant
  • Platform User Experience Designer
  • Platform Strategy Designer
  • B2C Commerce Developer
  • JavaScript Developer
  • Omnistudio Developer
  • Platform Developer II
  • Marketing Cloud Engagement Administrator
  • Marketing Cloud Engagement Specialist
  • Marketing Cloud Engagement Consultant
  • Agentforce Sales Foundations
  • Business Analyst
  • Marketing Cloud Engagement Developer
  • Marketing Cloud Engagement Foundations
  • Agentforce Specialist
  • Agentforce Life Sciences Consultant
  • B2B Commerce Administrator AP
  • B2B Commerce Developer AP
  • Agentforce Consumer Goods AP
  • Agentforce Financial Services AP
  • Agentforce Health AP
  • Agentforce Manufacturing AP
  • MuleSoft Integration Foundations
  • MuleSoft Developer
  • MuleSoft Developer II
  • MuleSoft Platform Integration Architect
  • MuleSoft Platform Architect
  • Tableau Desktop Foundations
  • Tableau Data Analyst
  • Tableau Consultant
  • Tableau Server Administrator
  • Tableau Architect

Checklist progress

0/197Learned

  • How enabling multi-currency in an org adds the CurrencyIsoCode field to currency-enabled sObjects and what happens to SOQL queries that filter or aggregate currency fields
  • The difference between single currency and advanced (dated exchange rate) multi-currency and how dated exchange rates affect opportunity and forecast roll-ups in Apex
  • How SOQL handles currency conversion with the convertCurrency() function and its syntax in aggregate queries
  • The impact of multi-currency on SOQL aggregate functions (SUM, AVG) — whether results are in the corporate currency or the record currency
  • How Apex code must handle the IsoCode field when inserting or updating records in a multi-currency org, including required field population
  • How to use the CurrencyType and DatedConversionRate sObjects in Apex to retrieve exchange rates programmatically
  • How the System.Label class and custom labels support localization in Apex and Visualforce, and how translations are applied at runtime
  • Which Apex methods and System classes are affected by the running user's locale
  • Date and number formatting differences between User.LocaleSidKey values in Apex
  • The significance of with sharing, without sharing, and inherited sharing keywords in Apex and how they interact with the running user's record visibility
  • How Apex class sharing is inherited when one class calls another class declared with a different sharing keyword
  • The difference in behavior between Database.query() called from a with sharing class versus a without sharing class when record-level security is the concern
  • When Apex managed sharing is the correct solution versus a sharing rule or manual share, given a scenario with dynamic or complex record-access requirements
  • The structure of a sharing object (e.g., AccountShare) and the meaning of its RowCause, UserOrGroupId, and AccessLevel fields
  • How to grant record access programmatically by inserting rows into a sharing object from Apex, including required field values
  • How a custom RowCause (share reason) is created and why it is required for Apex managed sharing to survive record ownership changes
  • The difference between Custom Metadata Types and Custom Settings (hierarchy vs. list) in deployment and packaging
  • When to use Custom Metadata Type records instead of Custom Settings for configuration that must be deployable as metadata between orgs
  • How to access hierarchy custom settings in Apex using getInstance() versus getOrgDefaults() and which takes precedence
  • How to query Custom Metadata Type records in Apex using SOQL (FROM MyType__mdt) and what special rules apply (e.g., no DML allowed)
  • Data availability of Custom Metadata versus Custom Settings in Apex test contexts
  • How Custom Metadata records are included in Apex test execution without needing test data setup, unlike Custom Setting records
  • How to use the Metadata.Operations class to deploy or retrieve Custom Metadata Type records programmatically in Apex
  • The Protected attribute on Custom Metadata Type records and its implications for managed package subscribers
  • How Record-Triggered Flows and Apex triggers interact in the same transaction and the execution order between before-save flows, triggers, and after-save flows
  • How governor limits are shared across a single transaction that includes both declarative (Flow) and programmatic (Apex) automation
  • How multiple Record-Triggered Flows on the same object and trigger fire in a single transaction and potential for limit exhaustion
  • The risk of recursion when a trigger invokes a flow that causes the same trigger to fire again, and the mechanism to prevent it
  • When to use a before-save Record-Triggered Flow versus a before-trigger in Apex for field updates on the same record, based on performance and complexity
  • When to escalate from a declarative flow to Apex code, such as when HTTP callouts, complex data transformations, or dynamic SOQL are required
  • The benefits of using an invocable Apex method called from a Flow versus writing a full trigger for a specific automation task
  • How to declare an @InvocableMethod with @InvocableVariable-annotated input/output inner classes so the method can be called from Flow with structured data
  • How Outbound Messages (a declarative SOAP-based workflow action) differ from Apex callouts and when each is the appropriate integration approach
  • Which trigger context variables are available in before insert, before update, after insert, and after update contexts (Trigger.new, Trigger.old, Trigger.newMap, Trigger.oldMap)
  • How Trigger.isExecuting, Trigger.isBefore, Trigger.isAfter, Trigger.isInsert, Trigger.isUpdate context Boolean variables are used to route logic
  • Why DML and SOQL statements must not be placed inside trigger for-loops and the governor limit consequences if they are
  • How to bulkify a trigger by collecting IDs into a Set, querying outside the loop, and building maps for efficient record lookup
  • The one-trigger-per-object pattern and how to implement a trigger handler class to centralize logic and support unit testing
  • How to use a static Boolean flag in a handler class to prevent recursive trigger execution
  • How try-catch-finally blocks work in Apex and which exception types can be caught (DmlException, QueryException, etc.)
  • How to create a custom exception class in Apex by extending Exception, and when a custom exception should be thrown versus re-throwing a caught exception
  • The difference between Database.insert(records, false) with partial success and a standard DML insert that rolls back the entire transaction on any failure
  • How Database.SaveResult, Database.UpsertResult, and Database.DeleteResult are used to inspect per-record errors when allOrNone is false
  • The behavior of addError() on a trigger record and how it prevents DML from completing while surfacing a user-visible error message
  • How uncaught exceptions in an after-trigger cause the entire transaction (including all before-trigger DML) to be rolled back
  • How Savepoint and Database.rollback() are used to roll back DML to a specific point in a transaction without aborting the entire transaction
  • How to write child-to-parent relationship queries in SOQL using dot notation and the difference between standard and custom relationship names (__r suffix)
  • How to write a parent-to-child relationship query (nested SELECT) in SOQL and access the child records in Apex
  • The syntax of SOQL aggregate functions (COUNT, SUM, AVG, MIN, MAX) with GROUP BY
  • How the HAVING clause filters grouped results in SOQL aggregate queries
  • How OFFSET and LIMIT work together for pagination in SOQL, and the maximum allowed OFFSET value
  • How to write a SOQL semi-join (IN subquery) and its valid syntax constraints
  • How to write a SOQL anti-join (NOT IN subquery) and its valid syntax constraints
  • How to use the WITH SECURITY_ENFORCED clause in SOQL to enforce field- and object-level security, and what exception is thrown if a field is inaccessible
  • How to use FIELDS(ALL), FIELDS(STANDARD), and FIELDS(CUSTOM) in SOQL queries and their governor limit implications
  • The syntax and purpose of TYPEOF in polymorphic SOQL queries against fields like What or Who on Activity
  • The syntax and use of FOR UPDATE in SOQL to lock records and prevent concurrent modifications during a transaction
  • Future and Queueable Apex — primary use cases and governor limits
  • Batch Apex — primary use cases and governor limits
  • Scheduled Apex — primary use cases and governor limits
  • How @future(callout=true) enables HTTP callouts from a trigger context and the constraints on @future method signatures (only primitives and collections of primitives)
  • How Queueable Apex differs from @future methods in terms of support for non-primitive parameters, job monitoring, and the ability to chain jobs
  • How Queueable Apex supports chaining jobs via System.enqueueJob() inside execute() and the maximum chaining depth in non-sandbox contexts
  • When to choose Batch Apex over Queueable for processing large data volumes, specifically when the record count exceeds what a single transaction can handle
  • The Database.Batchable interface methods (start, execute, finish) and the governor limits that apply to each method in batch Apex
  • How Database.Stateful is used in batch Apex to persist instance variable values across execute() method calls
  • How to pass state between Queueable job chains and between batch start/execute/finish methods using instance variables
  • The maximum number of batch Apex jobs that can be queued or active simultaneously and the impact on System.enqueueJob() calls within a batch context
  • How to implement the Schedulable interface and use a CRON expression string with System.schedule() to run Apex at a recurring calendar-based schedule
  • How to schedule a batch Apex job to run at a specific time using System.scheduleBatch() versus implementing the Schedulable interface
  • How to construct and execute a dynamic SOQL query using Database.query(queryString) and the risks of SOQL injection if user input is not sanitized
  • How String.escapeSingleQuotes() prevents SOQL injection in dynamic queries and when it must be applied
  • How to use Schema.getGlobalDescribe() and Schema.describeSObjects() to dynamically retrieve sObject and field metadata at runtime
  • How to use Schema.SObjectType and Schema.SObjectField tokens in Apex for compile-time-safe metadata references compared to string-based describe calls
  • How to retrieve field-level describe information (isAccessible, isCreateable, isUpdateable) and enforce CRUD/FLS programmatically before DML
  • How to use dynamic DML with Database.query, Database.insert, and sObject.put() / sObject.get() for field access by API name string
  • How to dynamically build a list of field API names from describe results and construct a SOQL SELECT clause programmatically for a generic query utility
  • How to use Type.forName() and dynamic instantiation of Apex classes to implement a strategy or plugin pattern
  • How to publish a Platform Event from Apex using EventBus.publish() and the difference between synchronous and transaction-scoped publishing
  • How Publish After Commit (default) versus Publish Immediately affects when subscribers receive a platform event relative to the publisher's transaction
  • How to subscribe to Platform Events in Apex using an after-insert trigger on the event object and the governor limits that apply
  • How LWC and Aura components subscribe to Platform Events using the lightning/empApi or empApi Aura module
  • Platform Event delivery durability and replay ID: how subscribers can replay missed events using a stored ReplayId
  • The behavior of Platform Events when a publishing transaction is rolled back — whether the event is still delivered to subscribers
  • How to use the EventBus.publish() return value and the OperationResult to check whether a Platform Event was successfully published in Apex
  • How Change Data Capture (CDC) differs from Platform Events in terms of what triggers the event, what data is included (changed fields only), and which objects support it
  • When to use Platform Events versus Change Data Capture for real-time integration scenarios
  • When to use Streaming API PushTopics versus Platform Events or Change Data Capture
  • How to make an outbound REST callout from Apex using HttpRequest, HttpResponse, and Http.send(), including setting endpoint, method, headers, and body
  • How Named Credentials abstract endpoint URL and authentication from Apex callout code and the syntax for referencing them (callout:MyNamedCredential/path)
  • The purpose of Remote Site Settings and how they are required for outbound callouts to external endpoints not covered by Named Credentials
  • The callout governor limits (number of callouts per transaction, maximum callout timeout) and the error thrown when they are exceeded
  • How to use JSON.serialize() and JSON.deserialize() in Apex for converting between sObjects/POJOs and JSON strings
  • The difference between JSON.deserialize() and JSON.deserializeStrict() and when to use each
  • How to expose an Apex class as a REST web service using @RestResource, @HttpGet, @HttpPost annotations and how request/response data is accessed
  • How to use the @RestResource urlMapping parameter with path parameters and how to read them from RestContext.request in the Apex method body
  • How to expose Apex methods as SOAP web services using the webService keyword and what types are supported in the WSDL
  • How to implement a StaticResourceCalloutMock in Apex tests to load mock HTTP responses from a static resource file instead of hand-crafting the response body
  • How to handle continuation-based callouts in Visualforce to perform asynchronous server-side callouts without blocking the browser
  • How @AuraEnabled(cacheable=true) and @AuraEnabled differ in terms of server-side caching behavior and which is required for wire adapter compatibility
  • How to return a List, Map, or custom Apex type from an @AuraEnabled method and the serialization rules that apply
  • How the @wire decorator in LWC calls an @AuraEnabled(cacheable=true) Apex method and when the data is refreshed
  • How to imperatively call an Apex method from LWC JavaScript using a promise-based import, versus using @wire
  • How to surface Apex exceptions to LWC callers using AuraHandledException and the effect on the error object received in the component's catch block
  • How apex:actionFunction enables JavaScript to invoke a controller method and optionally perform a partial page refresh via reRender
  • How the apex:actionSupport tag attaches a controller action to a DOM event (e.g., onclick, onchange) on a Visualforce component
  • How apex:actionRegion limits the components that are processed on the server during a partial page submission
  • How apex:actionStatus is used to display a loading indicator during an asynchronous action and how it ties to the status attribute of other action components
  • How apex:actionPoller automatically invokes a controller action at a specified interval and the minimum supported interval
  • How a Visualforce standard set controller enables list-based views with pagination via first(), next(), previous(), last(), and the pageSize property
  • How JavaScript Remoting (@RemoteAction) works in Visualforce, including the method signature requirements and callback structure in JavaScript
  • How Visualforce Remote Objects allow JavaScript-initiated CRUD operations without writing a controller method, and their governor limit behavior
  • How to catch and display errors from imperative Apex calls in LWC using the error property of the catch block and rendering it conditionally
  • How to display page-level errors in LWC using lightning-messages or a custom error message component, versus adding errors to apex:pageMessages in Visualforce
  • How to display field-level errors in LWC using the reportValidity() and setCustomValidity() methods on lightning-input components
  • How apex:pageMessages and apex:messages display controller-added messages and how ApexPages.addMessage() is used in a Visualforce controller
  • When to use LWC versus Aura versus Visualforce given requirements around modern browser standards, performance, and interoperability
  • Scenarios where Visualforce is still the required choice — PDF rendering, printing, embedded in email templates, or legacy apex:detail-heavy pages
  • Which features are exclusive to Aura components (e.g., extends for inheritance, application events) that have no direct LWC equivalent
  • How to use the SLDS grid system (slds-grid, slds-col, slds-size) in LWC and Aura to build responsive layouts
  • How to use the @salesforce/client/formFactor module in LWC to branch display logic based on device form factor (Large, Medium, Small)
  • Conditional rendering with if:true/if:false (Aura) and {#if} (LWC) for showing/hiding UI
  • How lightning/platformShowToastEvent displays toast notifications in LWC and Aura
  • How to dispatch a CustomEvent from a child LWC and handle it in the parent component using the template's event listener syntax
  • The difference between bubbling and non-bubbling CustomEvents in LWC, and how the composed flag affects propagation through shadow DOM boundaries
  • How to call a child LWC component's public method using @api and a reference obtained via this.template.querySelector()
  • How to use slots (default and named) in LWC for component composition and how slot content is rendered in the child template
  • How Aura component events work and when to use them
  • How Aura application events work and when to use them
  • How to use a Lightning Message Channel to communicate between unrelated LWC components, including MessageContext wire adapter and publish/subscribe APIs
  • How the lightning/uiRecordApi wire adapters (getRecord, getFieldValue, getFieldDisplayValue) are used to retrieve and display record data reactively in LWC
  • How to use NavigationMixin in LWC to navigate to a record, a named page, a standard object list, or a URL, and the syntax for each page reference type
  • How LWC shadow DOM prevents direct CSS and JavaScript access across component boundaries and the use of CSS custom properties (:host) to pierce the boundary for styling
  • The benefits of static resources for versioning and caching third-party JavaScript libraries in Salesforce deployments
  • How to reference a static resource in Visualforce using $Resource.ResourceName and the apex:includeScript / apex:stylesheet tags
  • How to reference a static resource in LWC using the @salesforce/resourceUrl import and loadStyle / loadScript from platformResourceLoader
  • The 75% code coverage requirement for Apex deployment to production and how coverage is calculated (lines executed / total executable lines)
  • How Test.startTest() and Test.stopTest() reset governor limits and force asynchronous Apex (future, batch, queueable) to execute synchronously in tests
  • How to use @testSetup to create shared test data once for all test methods in a class, and how DML is rolled back between test methods
  • How to use the Apex Test Data Factory pattern to create reusable, parameterized helper methods for generating test records
  • How to use Test.loadData() with a static resource CSV file to load test records in bulk without writing explicit Apex test data creation code
  • How seeAllData=true on a test class or method works and why it is discouraged in favor of isolated test data
  • How to use the @TestVisible annotation to expose private methods and variables for testing without changing their access modifiers
  • How to use Test.setMock() with an HttpCalloutMock implementation to simulate HTTP callout responses in Apex tests
  • How to use a StaticResourceCalloutMock to return mock HTTP responses stored in a static resource, and when it is preferable to a hand-coded HttpCalloutMock
  • How to use MultiStaticResourceCalloutMock to return different mock responses for multiple endpoints in a single test method
  • How to use Test.setMock() with WebServiceMock to simulate SOAP web service responses in Apex tests
  • How to implement a stub provider using the StubProvider interface and System.StubProvider to mock Apex class behavior without a managed package
  • How to use Jest and @salesforce/sfdx-lwc-jest to unit-test LWC JavaScript without a Salesforce org, including mocking wire adapters and Apex imports
  • How to mock LWC wire adapter responses in Jest tests using the @salesforce/wire-service-jest-util to simulate both data and error states
  • How to use the browser Developer Tools and the Lightning Web Components debug mode to inspect component properties and events at runtime
  • How to use the Lightning Component Inspector browser extension to view the component tree, properties, and event log for LWC and Aura components
  • How to write a Visualforce controller extension that adds behavior to a standard controller and how to test the extension in an Apex test class
  • How to read an Apex debug log to identify which lines of code executed, what DML operations occurred, and where an exception was thrown
  • How to set debug log levels (FINEST, DEBUG, INFO, WARN, ERROR) and which log categories (Apex Code, Database, System) control what appears in the log
  • How to use System.debug() with LoggingLevel parameter and how to read LIMIT_USAGE_FOR_NS lines in a debug log to identify governor limit issues
  • How to identify and resolve a 'Too many SOQL queries: 101' or 'Too many DML statements: 151' error by reading a debug log or test failure message
  • The difference between Metadata API and SFDX (Salesforce CLI) source format for deployment
  • The purpose of the sfdx-project.json file and how it defines package directories, the namespace, and the source API version for a Salesforce DX project
  • How to use Salesforce CLI commands (sf project deploy start, sf project retrieve start) for source-driven deployments
  • How package.xml (manifest) files specify which metadata components to include in a Metadata API deployment or retrieval
  • The purpose of a .forceignore file in a Salesforce DX project and how it controls which metadata is retrieved or deployed
  • The role of scratch orgs in a source-driven development workflow and how they differ from sandboxes for development and testing
  • How to run specified Apex tests during a deployment using the RunSpecifiedTests or RunLocalTests option and the minimum code coverage requirement
  • How to use sf apex run test --synchronous and interpret the test result output including code coverage percentages and failure messages via CLI
  • How Change Sets differ from Salesforce CLI/Metadata API deployments in terms of source control integration and automation capability
  • The difference between unlocked packages and managed packages in namespace requirements, versioning, and subscriber edit rights
  • When to use unlocked packages versus managed packages
  • How to create and install an unlocked package using the Salesforce CLI (sf package create, sf package version create, sf package install) and what artifacts are produced
  • How a CI/CD pipeline using GitHub Actions or GitLab CI integrates with Salesforce DX to authenticate via a connected app JWT and deploy on pull request merge

Identify the common performance issues for user interfaces and demonstrate knowledge of techniques and tools to mitigate them.

0/5

  • How the number of components on a Lightning page, excessive wire calls, and large data payloads degrade UI performance, and how to mitigate them
  • How caching @AuraEnabled(cacheable=true) Apex results reduces server round trips in LWC wire-based data fetching
  • How lazy loading components using conditional rendering (if:true) versus always rendering hidden components affects initial page load performance in LWC
  • How to use the Chrome DevTools Performance tab and Network panel to diagnose slow LWC rendering and excessive server calls
  • How to use the Lightning Experience Performance page and Salesforce Optimizer to identify slow-loading pages and components

Given a scenario, choose the appropriate logic and query structure to maximize application performance and handle large data volumes.

0/9

  • How to use SOQL query selectively (indexed fields in WHERE clause) to avoid full table scans and non-selective query errors on large objects
  • Which standard fields are automatically indexed in Salesforce (Id, Name, OwnerId, CreatedDate, external ID fields)
  • How to use the Salesforce query plan tool (Query Plan button in Developer Console) to analyze whether a query will use an index or perform a full table scan
  • How heap size limits in Apex (6 MB synchronous / 12 MB asynchronous) constrain large query results, and the pattern of using SOQL for loops or pagination to stay within limits
  • How to use SOQL for loops (for (SObject s : [SELECT ...]) {}) to process large query results without exceeding heap size limits
  • How to use QueryLocator in batch Apex start() to retrieve up to 50 million records compared to the Iterable approach, and when each is appropriate
  • How to use the Platform Cache (Org Cache and Session Cache) in Apex via Cache.Org.put() / get() to cache expensive query results or computed values across transactions
  • The difference between Org Cache and Session Cache in Platform Cache: scope, TTL, visibility across users, and Apex usage patterns for each
  • How to avoid locking contention and row-lock errors by designing batch jobs and triggers to avoid updating the same parent records concurrently

Analyze a given scenario and determine performance improvements that can be achieved with an asynchronous callout.

0/3

  • The maximum synchronous callout timeout (120 seconds) versus the benefit of asynchronous callouts for long-running external services
  • How moving an HTTP callout from a synchronous Apex controller method to a @future or Queueable Apex method prevents the user from waiting on the external response
  • How Continuation objects in Visualforce and LWC allow server-side callouts to run asynchronously while the browser remains responsive

Select scenarios where code reuse is applicable and how the reuse should be implemented.

0/4

How to design a utility/service class in Apex with static methods to share common logic across multiple triggers, controllers, and batch classes

Learn this concept
Unseen

How to implement an invocable Apex method using @InvocableMethod so it can be called from Flow, Process Builder, and REST API, enabling reuse across channels

Learn this concept
Unseen

How to create a reusable LWC base component that encapsulates common UI logic and is composed into multiple parent components

Learn this concept
Unseen

How to use Apex interfaces to define contracts between a trigger handler and interchangeable strategy implementations for policy-based reuse

Learn this concept
Unseen

Given sample code, identify inefficiencies and demonstrate the ability to resolve them.

0/6

  • Given Apex code with SOQL inside a for-loop, identify the governor limit risk and rewrite the query outside the loop using a Map for lookup
  • Given Apex code with DML inside a for-loop, identify the issue and refactor to collect records in a List and perform a single bulk DML operation
  • Given a SOQL query missing a WHERE clause filter on an indexed field against a large object, identify the non-selective query risk and the correct remediation
  • Given a batch Apex execute() method that queries records instead of processing the scope parameter, identify the inefficiency and the correct pattern
  • Given an LWC that calls multiple @wire-decorated methods for related data, identify when a single server-side Apex method combining data would be more efficient
  • Given Apex code that uses String concatenation in a loop to build a large string, identify the heap size risk and rewrite using a List<String> and String.join()

Prepare for the Exam

Play Today's Certle
Back to track

Study Community

Ask questions and get the latest info from other Platform Developer II studiers. 593 members and growing.

Go to Discord

How to design a utility/service class in Apex with static methods to share common logic across multiple triggers, controllers, and batch classes

Explainer

Learn More

Practice Question

Keep going

Next conceptHow to implement an invocable Apex method using @InvocableMethod so it can be called from Flow, Process Builder, and REST API, enabling reuse across channels

Checklist progress

0/197 (0%)

0 of 197 concepts learned

Tip: You can filter concepts by status.

Prepare for the Exam

Play Today's Certle
Back to track

Study Community

Ask questions and get the latest info from other Platform Developer II studiers. 593 members and growing.

Go to Discord

Explainer

Static methods in Apex classes enable code reuse across different execution contexts like triggers, controllers, and batch jobs. These utility or service classes encapsulate business logic without requiring class instantiation, adhering to Separation of Concerns principles.

Core information
  • Static methods are associated with the class itself rather than an instance, allowing them to be called without creating an object.
More details and nuances
  • Static methods cannot access instance member variables of their class, limiting them to class-level or passed-in data.